网站建设公司盈利,动态wordpress模板,企业怎么在网站上做宣传,正规网站建设咨询电话目录
说明#xff1a;
一、任务通知
1.1、什么是任务通知
1.2、任务通知优势与劣势
1.3、任务通知值的更新方式
1.4、任务通知值状态
1.5、任务通知状态
1.6、任务通知方式类型
二、任务通知相关API函数
2.1、常用的发送通知API函数
2.2、带通知值的发送通知函数
…目录
说明
一、任务通知
1.1、什么是任务通知
1.2、任务通知优势与劣势
1.3、任务通知值的更新方式
1.4、任务通知值状态
1.5、任务通知状态
1.6、任务通知方式类型
二、任务通知相关API函数
2.1、常用的发送通知API函数
2.2、带通知值的发送通知函数
2.3、常用的接收通知API函数
2.4、ulTaskGenericNotifyTake函数
2.5、xTaskGenericNotifyWait函数
2.6、最佳使用场合 说明 关于内容 1以下内容多为概念了解与步骤分析 2暂无个人示例代码使用的是FreeRTOS的官方示例代码 3若想移植代码测试的请移步其它地方寻找下文内容暂无个人示例代码供测试 关于其它 1操作系统win 10 2平台keil 5 mdk 3语言c语言 4板子STM32系列移植FreeRTOS 一、任务通知
1.1、什么是任务通知 用来通知任务的任务控制块中的结构体成员ulNotifiedValue就是这个通知值。
1.2、任务通知优势与劣势
优势 1效率更高使用任务通知向任务发送事件或数据比使用队列、事件标志组或信号量快得多 2使用内存小使用其他方法都需要创建对应的结构体使用任务通知无需创建结构体。
劣势 1无法发送数据给ISR中断ISR没有结构体通过结构体成员ulNotifiedValue所以无法给ISR发送数据。但ISR可以使用任务通知给任务发送数据 2无法广播多个任务任务通知只能给指定的一个任务接收并处理 3无法缓存多个数据任务通知是通过更新任务通知值来发送数据的任务结构体中只有一个任务通知值只能保存一个数据 4发送受阻不支持发送方无法进入阻塞状态等待。
1.3、任务通知值的更新方式 1不覆盖接受任务的通知值 2覆盖接受任务的通知值 3更新接受任务通知值的一个或多个bit 4增加接受任务的通知值。
类型如下 1计数值数值累计类型信号量 2对应位置一类似事件标志组 3任意数值支持覆写或不覆写类似队列
以上更新方式只要合理灵活的利用任务通知的特点可以在一些场合中替代队列、信号量、事件标志组。 1.4、任务通知值状态
任务都有一个结构体任务控制块TCB存在两个结构体成员变量如下图1 图1
注意uint32_t类型用来表示通知值uint8_t类型用来表示通知状态
1.5、任务通知状态
任务通知状态有3种取值如下图2 图2 名称任务未等待通知含义任务通知默认的初始化状态 名称等待通知含义接收方已准备好此时已调用接收任务通知函数等待发送方给通知 名称等待接收含义发送方已发送此时已调用发送任务通知函数等待接收方接收 1.6、任务通知方式类型
代码实现 typedef enum { eNoAction 0, /* Notify the task without updating its notify value. */ eSetBits, /* Set bits in the tasks notification value. */ eIncrement, /* Increment the tasks notification value. */ eSetValueWithOverwrite, /* Set the tasks notification value to a specific value even if the previous value has not yet been read by the task. */ eSetValueWithoutOverwrite /* Set the tasks notification value if the previous value has been read by the task. */ } eNotifyAction; 参数含义 名称eNoAction 含义无操作 名称eSetBits含义更新指定位 名称eIncrement含义通知值1 名称eSetValueWithOverwrite含义覆写方式更新通知值 名称eSetValueWithoutOverwrite 含义不覆写方式更新通知值 二、任务通知相关API函数
2.1、常用的发送通知API函数
如下图4 图4
2.2、带通知值的发送通知函数
代码实现 BaseType_t xTaskGenericNotify( TaskHandle_t xTaskToNotify, UBaseType_t uxIndexToNotify, uint32_t ulValue, eNotifyAction eAction, uint32_t * pulPreviousNotificationValue ) PRIVILEGED_FUNCTION; 参数含义 名称xTaskToNotify含义接收任务通知的任务句柄 名称uxIndexToNotify含义任务的指定通知 名称ulValue含义任务通知值 名称eAction含义通知方式通知值关系方式 名称pulPreviousNotificationValue 含义用于保存更新前的任务通知值NULL不保存 2.3、常用的接收通知API函数 函数名称ulTaskNotifyTask 作用获取任务通知可以设置在退出此函数时将任务通知值清零或-1当任务通知用作二值信号量或计数信号量时使用此函数获取信号量。 函数名称xTaskNotifyWait 作用获取任务通知比ulTaskNotifyTask更复杂可获取通知值和清除通知值的指定位。 2.4、ulTaskGenericNotifyTake函数
代码实现 #define ulTaskNotifyTake( xClearCountOnExit, xTicksToWait ) \ ulTaskGenericNotifyTake( ( tskDEFAULT_INDEX_TO_NOTIFY ), ( xClearCountOnExit ), ( xTicksToWait ) ) 参数含义 名称tskDEFAULT_INDEX_TO_NOTIFY 含义任务的指定通知 名称xClearCountOnExit 含义指定任务在成功接收通知后将通知值清零或-1pdTRUE--把通知值清零pdFALSE--把通知值-1 名称xTicksToWait 含义阻塞等待任务通知值的最大时间 返回值含义 返回0含义接收失败 返回非0含义接收成功返回任务通知的通知值 2.5、xTaskGenericNotifyWait函数
代码实现 #define xTaskNotifyWait( ulBitsToClearOnEntry, ulBitsToClearOnExit, pulNotificationValue, xTicksToWait ) \ xTaskGenericNotifyWait( tskDEFAULT_INDEX_TO_NOTIFY, ( ulBitsToClearOnEntry ), ( ulBitsToClearOnExit ), ( pulNotificationValue ), ( xTicksToWait ) ) 参数含义 名称tskDEFAULT_INDEX_TO_NOTIFY含义任务的指定通知 名称ulBitsToClearOnEntry 含义等待清零指定任务通知的比特位 名称ulBitsToClearOnExit 含义成功等待后清零指定的任务通知值比特位 名称pulNotificationValue 含义用来取出通知值不使用设为NULL 名称xTicksToWait 含义阻塞等待任务通知值的最大时间 返回值含义 返回pdTRUE含义等待任务通知成功 返回pdFALSE含义等待任务通知失败 注意此函数用于获取通知值和清除通知值的指定位值适用于模拟队列和事件标志组使用该函数来获取任务。 2.6、最佳使用场合 1当任务通知用作信号量时使用函数获取信号量ulTaskNotifyTask 2当任务通知用作事件标志组或队列时使用函数来获取xTaskNotifyWait