1
0
mirror of https://github.com/RIOT-OS/RIOT.git synced 2024-12-29 04:50:03 +01:00
RIOT/cpu/esp8266/startup.c
Erik Ekman e5d60176e4 cpu/esp: Suppress cppcheck errors
cpu/esp_common/syscalls.c💯 error (memleak): Memory leak: mtx
cpu/esp_common/syscalls.c:131: error (memleak): Memory leak: rmtx
cpu/esp_common/syscalls.c:365: error (comparePointers): Subtracting pointers that point to different objects

cpu/esp_common/thread_arch.c:355: error (comparePointers): Comparing pointers that point to different objects

cpu/esp8266/startup.c:59: error (comparePointers): Subtracting pointers that point to different objects
2021-11-25 13:08:51 +01:00

161 lines
3.5 KiB
C

/*
* Copyright (C) 2019 Gunar Schorcht
*
* This file is subject to the terms and conditions of the GNU Lesser
* General Public License v2.1. See the file LICENSE in the top level
* directory for more details.
*/
/**
* @ingroup cpu_esp8266
* @{
*
* @file
* @brief Implementation of the CPU initialization
*
* @author Gunar Schorcht <gunar@schorcht.net>
* @}
*/
#include <stdint.h>
#include <stdio.h>
#include <stddef.h>
#include <stdarg.h>
#include <string.h>
#include "kernel_init.h"
#include "periph/init.h"
#include "periph/uart.h"
#include "board.h"
#include "esp/common_macros.h"
#include "esp_log.h"
#include "esp_system.h"
#include "exceptions.h"
#include "stdio_base.h"
#include "syscalls.h"
#include "thread_arch.h"
#include "rom_functions.h"
#include "sdk/sdk.h"
#if MODULE_ESP_GDBSTUB
#include "gdbstub.h"
#endif
#define ENABLE_DEBUG 0
#include "debug.h"
/* external esp function declarations */
extern uint32_t hwrand (void);
void esp_riot_init(void)
{
/* clear RTC bss data */
extern uint8_t _rtc_bss_start, _rtc_bss_end;
esp_reset_reason_t reset_reason = esp_reset_reason();
if (reset_reason != ESP_RST_DEEPSLEEP && reset_reason != ESP_RST_SW) {
/* cppcheck-suppress comparePointers */
memset(&_rtc_bss_start, 0, (&_rtc_bss_end - &_rtc_bss_start));
}
/* enable cached read from flash */
Cache_Read_Enable_New();
/* initialize the ISR stack for usage measurements */
thread_isr_stack_init();
#ifndef MCU_ESP8266
/* initialize newlib system calls */
syscalls_init ();
#endif
/* set system frequency if not 80 MHz */
if (ESP8266_CPU_FREQUENCY != 80) {
system_update_cpu_freq(ESP8266_CPU_FREQUENCY);
}
ets_printf("\n");
#ifdef MODULE_ESP_LOG_STARTUP
ets_printf("Starting ESP8266 CPU with ID: %08x\n", system_get_chip_id());
ets_printf("ESP8266-RTOS-SDK Version %s\n\n", system_get_sdk_version());
ets_printf("CPU clock frequency: %d MHz\n", system_get_cpu_freq());
extern void heap_stats(void);
heap_stats();
#endif
/* set exception handlers */
init_exceptions ();
/* systemwide UART initialization */
extern void uart_system_init (void);
uart_system_init();
/* init watchdogs */
system_wdt_init();
/* init random number generator */
srand(hwrand());
#if MODULE_MTD
/* init flash drive */
extern void spi_flash_drive_init (void);
spi_flash_drive_init();
#endif
/* initialize stdio*/
extern int stdio_is_initialized;
stdio_init();
stdio_is_initialized = 1;
/* trigger static peripheral initialization */
periph_init();
/* trigger board initialization */
board_init();
#ifdef MODULE_ESP_LOG_STARTUP
/* print the board config */
board_print_config();
#else
/* to have an empty line after the unreadable characters from ROM loader */
puts("");
#endif
/* initialize ESP system event loop */
extern void esp_event_handler_init(void);
esp_event_handler_init();
/* activate software interrupt based context switch */
extern void IRAM thread_yield_isr(void* arg);
ets_isr_attach(ETS_SOFT_INUM, thread_yield_isr, NULL);
ets_isr_unmask(BIT(ETS_SOFT_INUM));
#ifdef MODULE_ESP_GDBSTUB
gdbstub_init();
#endif
}
void esp_riot_start(void)
{
/* does not return */
kernel_init();
}
void __wrap_pp_attach(void)
{
#ifdef MODULE_ESP_WIFI_ANY
extern void __real_pp_attach(void);
__real_pp_attach();
#endif
}
void __wrap_pm_attach(void)
{
#ifdef MODULE_ESP_WIFI_ANY
extern void __real_pm_attach(void);
__real_pm_attach();
#endif
}