FREERTOS实时系统简介
智能仿生——柴树杉
中心研讨会
中国科学院深圳先进技术研究院 智能仿生研究中心
RTOS存在的理由
更好的利用硬件资源(空闲CPU );
简化开发(复杂)应用的难度;
代码结构更清晰, 易于维护和移植 ;
......
FREERTOS特点
开源代码, 免费, 可用于商业;
可移植性好, 支持多种硬件;
功能完备, 提供模拟器仿真;
足够稳定, 目前版本5.3.0;
......
网站: FreeRTOS.org
传统单片机程序
void myfun1(...);
void myfun2(...);
int main()
{
while(1)
{
myfun1(...);
myfun2(...);
// ...
}
return 0;
}
基于RTOS的程序
void mytask1()
{
while(1)
{
// ...
}
}
void mytask2()
{
while(1)
{
// ...
}
}
int main()
{
createTask(mytask1);
createTask(mytask2);
return 0;
}
FREERTOS中的任务
void vMyTask1( void *pvParameters )
{
for( ;; )
{
// -- Task application code here. --
}
}
int main()
{
xTaskCreate(vMyTask1); // 创建任务
vTaskStartScheduler(); // 开始调度
}
任务状态切换
任务组织示意图
任务相关的函数
xTaskHandle (type)
xTaskCreate()
vTaskDelete()
vTaskDelay()
vTaskDelayUntil()
uxTaskPriorityGet()
vTaskPrioritySet()
vTaskSuspend()
vTaskResume()
xTaskResumeFromISR()
消息队列
消息队列相关函数
xQueueCreate
xQueueSend
xQueueSendToBack
xQueueSendToFront
xQueueReceive
xQueuePeek
xQueueSendFromISR
xQueueSendToBackFromISR
xQueueSendToFrontFromISR
xQueueReceiveFromISR
二值信号量
互斥锁
信号量/互斥锁函数
vSemaphoreCreateBinary
vSemaphoreCreateCounting
xSemaphoreCreateMutex
xSemaphoreCreateRecursiveMutex
xSemaphoreTake
xSemaphoreTakeRecursive
xSemaphoreGive
xSemaphoreGiveRecursive
xSemaphoreGiveFromISR
内存管理
基本函数
void vPortInitialiseBlocks( void )
void *pvPortMalloc( size_t xWantedSize )
void vPortFree( void *pv )
特点
线程安全!!
优化内存使用
优化执行效率
FREERTOS命名规则
变量名
前缀c - char
前缀s - short
前缀l - long
前缀f - float
前缀d -double
前缀e -枚举变量(enum)
前缀x - 未知类型
函数
前缀prv - 内部函数
API函数采用返回值类型前缀
函数名前部包含模块名
代码结构
FreeRTOS
|
+-Demo
| |
| +-Common 演示代码
| | +-Minimal 简化版工具函数
| | +-Full 完善版工具函数
| | +-include 工具函数头文件
| |
| +-AVR_ATMega323_WinAVR AVR单片机演示
| +-ParTest
| +-serial
|
+-Source 全部内核代码
代码结构(续)
+-Source 全部内核代码
+--- list.c 双向链
表
关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf
+--- queue.c 消息队列
+--- tasks.c 任务调度
+--- croutine.c 联合程序
|
+-include FreeRTOS头文件
|
+-portable CPU相关代码
|
+-MemMang 内存管理
|
+-GCC GCC编译器
+-ATmega32 AVR平台
应用: AT MEGA 128
应用: ARDUINO MEGA
参考资料
谢谢大家