rt_hw_pin_init()负责打开要使用GPIO口的时钟 rt_hw_usart_init()主要以层的形式进行各种串口回调函数配置 RT_WEAK void rt_hw_board_init() { /* Pin driver initialization is open by default */ #ifdef RT_USING_PIN rt_hw_pin_init(); #endif /* USART driver initialization is open by default...
1.2.4 rt_system_heap_init()函数对系统堆进行划分和初始化,这个函数相当重要了,堆主要是给memory申请和释放等使用的,我们看到,堆的开始和结束都是通过宏来设定的,_MEM_INIT()宏调用rt_memheap_init()函数完成堆初始化; 1.2.5 rt_hw_pin_init()函数仅仅使用到的Port打开RCC时钟,并注册Pin操作的回调函数,其...
8.再编译会提示 rt_hw_board_init 这个函数未定义,这个函数是启动流程初始化板卡用的,所以用到刚才的board.c文件,在里面记得调用main函数的头文件,和 #include "rtthread.h" #include "rtconfig.h" 这两个头文件, board.c里定义rt_hw_board_init 这个函数如下: void rt_hw_board_init(void) { HAL_Ini...
函数rtthread_startup在《components.c》中,调用了rt_hw_board_init(); 2.rt_hw_board_init() 函数rt_hw_board_init在《board.c》中,调用了rt_hw_usart_init(); 3.rt_hw_usart_init() 函数rt_hw_usart_init在《drv_uart.c》中,drv_uart.c里面有很多处需要修改。 这里贴出drv_uart.c的全部代码,...
#define INIT_APP_EXPORT(fn) INIT_EXPORT(fn, "6") 通过源码的学习,了解一下程序初始化过程。 1)首先在main函数内调用了 rtthread_startup() 函数; 2)在void rtthread_startup(void)内调用了 rt_hw_board_init() 函数; 3)在 rt_hw_board_init() 函数内调用 rt_components_board_init(); ...
board.c文件中的rt_hw_board_init()函数 -> drv_common.c文件中的hw_board_init()函数 -> drv_clk.c文件中的clk_init()函数 -> drv_clk.c文件中的system_clock_config()函数。 知道这个流程之后就可以自行修改时钟配置函数。 总结:关于修改外部时钟配置的网上有很多人写过,只不过可能不少人会忽略了修改...
我在rtthread_startup函数按照步骤往下看,进入到rt_hw_board_init函数,发现 L051 是默认不使用堆,也就不会初始化堆空间,如下图: 其实很好理解,因为 L051 的内存是在是太小了。当然我们自己也可以去修改配置,但是为了系统的稳定性,最好不要这么去做。
在board.c的rt_hw_board_init函数中,添加如下代码: 1vPortSetupTimerInterrupt();//初始化定时器2volatileuint32_tmtvec=0;3__asmvolatile("csrr%0,mtvec":"=r"(mtvec));//声明仅有一张向量表4__asmvolatile("csrsmie,%0"::"r"(0x880));//使能定时器中断与外部中断 ...
rt_uint8_t *rt_hw_stack_init(void *tentry, void *parameter,rt_uint8_t *stack_addr, void ...
里面有一些函数是我们自己实现的,比如开发板初始化:rt_hw_board_init, rtt还是有点好玩的,对外开放了main嘛!我们一般写程序都在main.c中,所以,它又搞了个main_thread_entry线程(其实我更喜欢把这些称作任务,不过都一样啦,既然学了rtt,那就跟官方叫吧) ...