摘要: 任务需要与多个事件或任务进行同步时,需要用到事件标志组。 一个事件组就是一组的事件位, 事件组中的事件位通过位编号来访问。 事件标志组的数据类型为 EventGroupHandle_t。 事件标志组中的所有事件位都存储在一个无符号的 EventBits_t 类型的变量中。 EventBits_t 类 阅读全文
posted @ 2017-11-24 14:27 为民除害 阅读(1303) 评论(0) 推荐(0) 编辑
摘要: 二级指针问题 阅读全文
posted @ 2017-11-22 20:25 为民除害 阅读(482) 评论(0) 推荐(0) 编辑
摘要: 用于信号量的队列,都是只有队列数据结构的空间,没有队列项存储空间的队列。 二值、计数、互斥、递归互斥,创建完成之后的内存状态:(转自 http://blog.csdn.net/zhzht19861011/article/details/51537234) 一、创建二值信号量 只关注这个队列是否为满, 阅读全文
posted @ 2017-11-20 21:04 为民除害 阅读(2695) 评论(0) 推荐(0) 编辑
摘要: 相对时间延时 >1 记录时间点O >2 将任务从就绪列表删除 >3 根据时间点O,计算唤醒的时间点 >3' 将唤醒时间点,写入任务状态列表项的value里,用于排序插入。 >4 根据唤醒时间点,将任务加入到延时列表或者溢出的延时列表 >5 更新NextTaskUnblockTime 为什么有两个延时 阅读全文
posted @ 2017-11-20 11:39 为民除害 阅读(1364) 评论(0) 推荐(0) 编辑
摘要: 开启调度器 一、开启systick 二、开启FPU,浮点处理单元 CPACR Register to enable floating point unit feature; available on Cortex -M4 with floating point unit only 三、开启第一个任务 阅读全文
posted @ 2017-11-19 23:19 为民除害 阅读(4911) 评论(0) 推荐(0) 编辑
摘要: 使用PendSV实现任务切换 在调度器不挂起的情况下,在任务函数中,一旦置位PendSV请求,立即产生任务切换。 一旦置位,立即切换! 一旦置位,立即切换! 一旦置位,立即切换! 一、系统调用 taskYIELD: 二、系统滴答定时器中断: 系统调用TaskYield和滴答定时器中断,都在做同一个事 阅读全文
posted @ 2017-11-19 20:34 为民除害 阅读(1690) 评论(0) 推荐(1) 编辑
摘要: 任务挂起: 它把所有挂起的任务加到 xSuspendedTaskList 中, 而且一旦调用 vTaskSuspend() 函数挂起一个任务,该任务就将从所有它原先连入的链表中删除(包括就绪表,延时表和它等待的事件链表【两类列表都要清掉】), 也就是说,一旦一个任务被挂起,它将取消先前它的延时和对事 阅读全文
posted @ 2017-11-17 20:25 为民除害 阅读(5528) 评论(0) 推荐(0) 编辑
摘要: 直接上代码 ##1 (1)configUSE_PORT_OPTIMISED_TASK_SELECTION被定义为1的时候: 如果这个优先级的 任务就绪列表的长度为0,则调用下面的 portRESET_READY_PRIOR uxTopReadyPrior的定义: uxTopReadyPrior变量的 阅读全文
posted @ 2017-11-16 21:03 为民除害 阅读(3344) 评论(0) 推荐(0) 编辑
摘要: xTaskCreate 阅读全文
posted @ 2017-11-16 19:21 为民除害 阅读(2045) 评论(0) 推荐(0) 编辑
摘要: 出队操作类似于入队的操作。先整明白入队的操作,这个就好说了。 函数在读取消息的时候是采用拷贝方式的,所以用户需要提供一个数组或缓冲区来保存读取到的数据, 所读取的数据长度是创建队列的时候所设定的每个队列项目的长度 BaseType_t xQueueReceive( QueueHandle_t xQu 阅读全文
posted @ 2017-11-16 11:20 为民除害 阅读(2662) 评论(0) 推荐(0) 编辑