我采用的书籍是**《FreeRTOS内核实现与应用开发实践指南——基于STM32》**。我也是一边学习一边总结笔记,不会很全面,是从我的理解出发,有错误之处烦请大家指正,
首先,书的引言部分,我看到有一个名词——裸机编程 ,我百度了一下,在下面做个小结。
裸机编程,顾名思义,就是直接在硬件上编程写代码,或者说编写直接在硬件上运行的程序,没有呢操作系统的支持。
一般我们把没有操作系统的编程环境,成为裸机编程环境,比如在单片机上编程,通过串口直接将程序下载到单片机的芯片内部的Flash中,单片机运行的时候,直接调用我们编程的程序,这时,我们编写的程序一般都有个while(1)的死循环存在,这样程序才能一直保持运行。
FreeRTOS的编程风格
学习一个RTOS,弄清楚她的编程风格是很重要的,可以提高我们阅读代码的效率。
1、数据类型
在FreeRTOS中,使用的数据类型是标准C里面的数据类型,但是针对不同的处理器,对标准C的数据类型进行了重定义,比如,为char重新定义为portCHAR在,这里的port表示接口。
在FreeRTOS中,int型从不使用,只使用short型和long型,在Cortex-M内核的MCU中,short为16位,long为32位。
在编程时,如果用户没有明确char的符号类型,那么编译器会默认指定char型的变量是无符号或者有符号。所以,在FreeRTOS中,我们都需要明确指定char型变量是有符号还是无符号。在keil中,char默认是无符号的,可以在Options for Target->C/C++中修改。
2、变量名
在FreeRTOS中,定义变量时往往会把变量的类型当作前缀加在变量上,这样一样就知道该变量的类型。
| 类型 | 前缀 |
|---|---|
| char | c |
| short | s |
| long | l |
| portBASE_TYPE | x |
| 数据结构,任务句柄,队列句柄等 | x |
| 无符号型 | u |
| 执政变量 | p |
比如,定义一个无符号char类型变量,前缀为uc,定义一个char类型的指针变量,前缀为pc。
3、函数名
函数名包含了函数返回的类型、函数所在的文件名和函数的功能,如果私有函数,会加一个prv(private)的前缀。特别地,在函数名中加入了函数所在的文件名,这样帮助用户提高寻找函数定义的效率并了解函数作用,比如
1)vTaskPrioritySet()函数的返回值为void型,在task.c文件中定义。
2)xQueueReceive()函数的返回值为portBASE_TYPE型,在queue.c文件中定义。
4、宏
要注意信号量的函数都是一个宏定义,但函数命名方法是遵循函数的命名方法而不是宏定义的方法。
下方是几个通用的宏定义:
5、格式
Tab=4个空格,但是编程最好用空格,不用Tab,移植的时候,如果编译器的Tab设置不一样,那么代码会变乱。