0 学习RIOT的源码结构。
去官网看模块和函数的介绍和例子。下载源码看下。
启动过程:
1)startup:cortexM call
void reset_handler_default(void)
{
uint32_t *dst;
const uint32_t *src = &_etext;
#ifdef MODULE_PUF_SRAM
puf_sram_init((uint8_t *)&_srelocate, SEED_RAM_LEN);
#endif
pre_startup();
#ifdef DEVELHELP
uint32_t *top;
/* Fill stack space with canary values up until the current stack pointer */
/* Read current stack pointer from CPU register */
__asm__ volatile ("mov %[top], sp" : [top] "=r" (top) : : );
dst = &_sstack;
while (dst < top) {
*(dst++) = STACK_CANARY_WORD;
}
#endif
/* load data section from flash to ram */
for (dst = &_srelocate; dst < &_erelocate; ) {
*(dst++) = *(src++);
}
/* default bss section to zero */
for (dst = &_szero; dst < &_ezero; ) {
*(dst++) = 0;
}
#ifdef CPU_HAS_BACKUP_RAM
if (!cpu_woke_from_backup() ||
CPU_BACKUP_RAM_NOT_RETAINED) {
/* load low-power data section. */
for (dst = _sbackup_data, src = _sbackup_data_load;
dst < _ebackup_data;
dst++, src++) {
*dst = *src;
}
/* zero-out low-power bss. */
for (dst = _sbackup_bss; dst < _ebackup_bss; dst++) {
*dst = 0;
}
}
#endif /* CPU_HAS_BACKUP_RAM */
#if defined(MODULE_MPU_STACK_GUARD) || defined(MODULE_MPU_NOEXEC_RAM)
mpu_enable();
#endif
#ifdef MODULE_MPU_NOEXEC_RAM
/* Mark the RAM non executable. This is a protection mechanism which
* makes exploitation of buffer overflows significantly harder.
*
* This marks the memory region from 0x20000000 to 0x3FFFFFFF as non
* executable. This is the Cortex-M SRAM region used for on-chip RAM.
*/
m