freertos与裸机的区别
裸机的程序:一般是执行完一个任务后,再执行下一个任务。
freertos的程序:当存在不同优先级时,会把优先级比较高的任务执行完,再执行优先级较低的任务,当存在任务的优先级一样时,会交替的执行,比如一个任务是100%,当存在任务(a,b)的优先级一样时,会a先执行1%,b再执行%1,再回到a执行%1,这样交替的执行,因为cpu切换的快,给人一种同时在执行的感觉。
堆和栈的概念
堆:一块空闲的内存,可由我们来管理,且可释放。
栈:也是一块空闲的内存,由操作系统自动分配释放,存放函数的参数值,局部变量的值等。
!!!每一个任务都有自己的栈。
freertos的数据类型和编程规范.
数据类型
每个移植的版本都含有自己的 portmacro.h 头文件,里面定义了2个数据类型:
TickType_t:
FreeRTOS配置了一个周期性的时钟中断:Tick Interrupt
每发生一次中断,中断次数累加,这被称为tick count
tick count这个变量的类型就是TickType_t
TickType_t可以是16位的,也可以是32位的
FreeRTOSConfig.h中定义configUSE_16_BIT_TICKS时,TickType_t就是uint16_t
否则TickType_t就是uint32_t
对于32位架构,建议把TickType_t配置为uint32_t
BaseType_t:
这是该架构最高效的数据类型
32位架构中,它就是uint32_t
16位架构中,它就是uint16_t
8位架构中,它就是uint8_t
BaseType_t通常用作简单的返回值的类型,还有逻辑值,比如 pdTRUE/pdFALSE
变量名
函数名
比如vTaskPrioritySet中,v表示返回类型为void,task表示函数在task.c里被定义.
宏的名字
任务的静态创建和动态创建
动态创建
静态创建任务
puxStackBuffer :自己定义的数组
使用静态创建任务,要自己创建一个数组,来存储数组(划分栈区)。
把该宏置1,freertos工程,有些没用的功能,默认是关闭的。这时我们就要打开它的宏。
还要定义一个vApplicationGetIdleTaskMemory函数。
原因在这:可以看到任务调度函数里,如果把静态创建任务的相关宏打开,就要定义一个vApplicationGetIdleTaskMemory();