FreeRTOS
day 01
操作系统分很多种,有大型的复杂、功能齐全操作系统,也有小型的代码几百行的操作系统内核;同时也有实时和非实时之分。本文主要学习实时操作系统(FreeRTOS)。
一方面是它完全开源和免费;
另一方面它的功能在小型操作系统里比较齐全;
第三个方面是它网上的资源非常多,学习起来比较方便;
创建任务
FreeRTOS提供了一套API函数,我们可以通过调用它的API函数去创建任务。
基本的创建任务函数有两个:xTaskCreate 和 xTaskCreateStatic。
区别:
xTaskCreate函数是用动态的方法创建任务,系统自动为任务分配内存;
xTaskCreateStatic函数用静态的方法创建任务;需要用户指定内存地址。
动态函数原型
BaseType_t xTaskCreate( TaskFunction_t pxTaskCode, //自己创建的任务函数的函数名
const char * const pcName, //任务的名字,字符串型
const uint16_t usStackDepth, //任务堆栈大小(实际上申请到的是这里的4倍)
void * const pvParameters, //任务函数的参数
UBaseType_t uxPriority, //任务优先级
TaskHandle_t * const pxCreatedTask ) //任务句柄(指针),也是任务堆栈
返回值
pdPASS:==1,任务创建成功,且添加到就绪列表
错误代码:负数,任务创建失败
静态函数原型
TaskHandle_t xTaskCreateStatic(TaskFunction_t pxTaskCode,
const char * const pcName,
const uint32_t ulStackDepth,
void * const pvParameters,
UBaseType_t uxPriority,
StackType_t * const puxStackBuffer, //由用户指定的堆栈空间
StaticTask_t * const pxTaskBuffer ) //任务控制块
返回值
None:无法创建任务,因为puxStackBuffer或pxTaskBuffer为空
Any other value:返回一个非空值,则创建任务成功,该值是创建的任务的句柄
osThreadDef函数
原型
#define osThreadDef(name, thread, priority, instances, stacksz) \
const osThreadDef_t os_thread_def_##name =
{ #name, (thread), (priority), (instances), (stacksz) }
举个
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。