FreeRTOS系统启动过程主要分为三部分:汇编部分、main函数初始化部分、开启任务调度部分。
对于汇编部分主要是设置一些中断向量表、设置堆和栈等一些C语言运行需要的条件,当这些部分设置完成时候,就会跳转到main函数运行。对于main函数初始化部分,主要是做一些必要的硬件外设初始化、板级初始化、还有就是任务的创建。任务创建完成之后,就会开启调度器,FreeRTOS开始运行。
下面就讲一下FreeRTOS是怎么开始运行的:
由于之前讲过一篇关于apollo2 MCU的汇编启动,关于Cortex-M4的汇编启动部分基本一致。大家可以看之前博客。直接从main函数开始,上代码:
int main(void)
{
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);//设置系统中断优先级分组4
delay_init(168); //初始化延时函数
uart_init(115200); //初始化串口
LED_Init(); //初始化LED端口
KEY_Init(); //初始化按键
LCD_Init(); //初始化LCD
my_mem_init(SRAMIN); //初始化内部内存池
POINT_COLOR = RED;
LCD_ShowString(30,10,200,16,16,"ATK STM32F103/407");
LCD_ShowString(30,30,200,16,16,"FreeRTOS Examp 20-1");
LCD_ShowString(30,50,200,16,16,"Mem Manage");
LCD_ShowString(30,70,200,16,16,"KEY_UP:Malloc,KEY1:Free");
LCD_ShowString(30,90,200,16,16,"KEY0:Use Mem");
LCD_ShowString(30,110,200,16,16,"ATOM@ALIENTEK");
LCD_ShowString(30,130,200,16,16,"2016/11/14");
LCD_ShowString(30,170,200,16,16,"Total Mem: Bytes");
LCD_ShowString(30,190,200,16,16,"Free Mem: Bytes");
LCD_ShowString(30,210,200,16,16,"Message: ");
POINT_COLOR = BLUE;
//创建开始任务
xTaskCreate((TaskFunction_t )</