十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

RIOT OS 学习记录

RIOT OS 学习记录 0 学习RIOT的源码结构。去官网看模块和函数的介绍和例子。下载源码看下。启动过程:1)startup:cortexM callvoid 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. */ mpu_configure( 0,
返回列表