freeRTOS API简记
来源:互联网 发布:伊顿公学 知乎 编辑:程序博客网 时间:2024/06/06 01:12
注意
利用信号量或任务 必须要确保任务或者信号量建立 习惯性进入和退出临界区
API
- TaskHandle_t创建任务句柄
任务栈大小 从FreeRTOSConfig.h中定义的heap空间中申请 单位word 4字节 - xTaskCreate创建任务
要先定义任务优先级、任务堆栈大小、任务句柄、任务函数 - vTaskStartScheduler开启任务调度 启动FreeRTOS
- start_task
- taskENTER_CRITICAL任务级的临界代码保护
临界区代码要精简 因为此时会关闭中断 - 创建其他任务
- vTaskDelete(StartTask_Handler)删除开始任务
taskEXIT_CRITICAL退出临界区
- taskENTER_CRITICAL任务级的临界代码保护
- vTaskDelete清除任务句柄
- 后最好加一句任务句柄清零
- IRQ 中断请求
- vTaskSuspend 挂起任务
- vTaskResume 恢复任务
vTaskResumeFromISR 中断服务函数中恢复一个任务的运行 若返回pdTrue 说明当前任务优先级高于或等于当前运行任务 退出中断时进行上下文切换portYIELD_FROM_ISR
中断发生的时候释放信号量
- SemaphoreHandle_t二值信号量句柄
- vSemaphoreCreateBinary创建二值信号量(在开始任务里创建
返回NULL 创建失败 FreeRTOS堆栈不足;返回其他值 信号量创建成功 返回值存储信号量句柄 - portBASE_TYPE xSemaphoreTake( xSemaphoreHandle xSemaphore, portTickType xTicksToWait ); 当句柄!=NULL时,获取信号量(除了互斥信号量) 。xTicksToWait为阻塞超时时间
- xSemaphoreGiveFromISR在中断中释放二值信号量
xHigherPriorityTaskWoken
BaseType_t xHigherPriorityTaskWoken;
xSemaphoreGiveFromISR(BinarySemaphore,&xHigherPriorityTaskWoken);//释放二值信号量
portYIELD_FROM_ISR(xHigherPriorityTaskWoken);//如果需要的话进行一次任务切换xSemaphoreCreateCounting(UBaseType_t uxMaxCount,UBaseType_t uxInitialCount)
创建计数信号量
用于事件计数或资源管理xSemaphoreCreateMutex创建互斥信号量
相对延时vTaskDelay 相对于这一时刻开始延时
- 绝对延时vTaskDelayUntil 每隔指定的时间 执行一次调用vTaskDelayUntil函数的任务 即:任务以固定的频率执行
- portTICK_RATE_MS 用于将以心跳为单位的时间值转化为以ms为单位的时间值 eg:vTaskDelay(200/portTICK_RATE_MS) 即延时200ms
xTaskGetTickCount初始化portTickType类型的变量为当前心跳计数值
portDISABLE_INTERRUPTS关闭中断
- portENABLE_INTERRUPTS打开中断
栈溢出检测机制:两种
优先级
- 中断优先级编号小 优先级高
- 任务优先级编号小 优先级低
- 中断优先级一定高于任务优先级
- 复位、NMI、HardFault优先级固定为负数
- 关闭中断时优先级高于等于4的不会被屏蔽 低于4的会被屏蔽
数据类型
- TickType_t系统节拍计数器变量数据类型 32位无符号
- BaseType_t 32位有符号
- StackType_t uint32_t
空闲任务钩子函数
- 被用于执行低优先级,后台或需要不停处理的功能代码
- 测试出系统处理裕量
- 将处理器配置到低功耗模式
void vApplicationIdleHook( void );
configUSE_IDLE_HOOK 必须定义为 1
阅读全文
0 0
- freeRTOS API简记
- FreeRTOS API离线手册
- FreeRTOS常用API
- 系统API的简记
- Sequelize API简记
- Vue API简记
- FreeRTOS系列第18篇---FreeRTOS队列API函数
- FreeRTOS系列第20篇---FreeRTOS信号量API函数
- FreeRTOS系列第18篇---FreeRTOS队列API函数
- FreeRTOS系列第20篇---FreeRTOS信号量API函数
- FreeRTOS--API函数(翻译整理)
- FreeRTOS中断调用api卡死
- FreeRTOS任务API函数的使用
- Immutable.js 4.00-rc9 API简记
- FreeRTOS
- FreeRTOS
- 简记
- 简记
- 在U-boot中添加以太网驱动
- eclipse出现An internal error occurred during: "Building workspace". Java heap space 错误。
- Linux命令行的艺术(2)-文件及数据处理
- 笨方法学习Python-习题30: Else 和 If
- PullToRefreshScrollView之自己创建ListVView
- freeRTOS API简记
- uiautomator测试判断结果后保存入指定文件夹路径中
- Could not obtain transaction-synchronized Session for current thread
- 【App Store审核】因PLA1.2被拒的个人经历和解决方法
- android面试-ART与Dalvik
- c++ 素数检测算法归纳
- Nginx服务器的反向代理proxy_pass配置方法讲解
- activemq 包冲突
- express 做html模板