ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

FreeRTos笔记(8)列表和列表项:ppt,vListInsert 有序插入,vListInsertEnd 把新节点插在链表指针 pxIndex 指向节点的前面;uxListRemove,例题源码

FreeRTos笔记(8)列表和列表项:ppt,vListInsert 有序插入,vListInsertEnd 把新节点插在链表指针 pxIndex 指向节点的前面;uxListRemove,例题源码

(67)vListInsert 链表插入:

voidvListInsert(List_t*constpxList,ListItem_t*constpxNewListItem){ListItem_t*pxIterator;// 节点迭代器constTickType_t xValueOfInsertion=pxNewListItem->xItemValue;listTEST_LIST_INTEGRITY(pxList);// 测试,参数的安全确认listTEST_LIST_ITEM_INTEGRITY(pxNewListItem);//将新列表项插入到已排序的列表中,按 xltemValue 顺序排列。//如果列表已经包含具有相同项目值的项目,则新项目应放置在其之后。//这确保了存储在就绪列表中的 TCB (所有 TCB 都具有相同的 xltemValue 值)能够共享 CPU。//然而,如果 xltemValue 与后置标记相同,下面的迭代循环将不会结束。//因此,会先检查该值并在必要时对算法进行略微修改.// #define portMAX_DELAY ( TickType_t ) 0xffffffffULif(xValueOfInsertion==portMAX_DELAY)pxIterator=pxList->xListEnd.pxPrevious;// 意思是插入到链表最后,哨兵节点的前面else// 以下是正常插入的情况{/***注意事项** : 如果您发现您的应用程序在此处崩溃,则可能的原因是并确保已定义 configASSERT()! 如下所列。此外,请参阅https://www.FreeRTOS.org/FAQHelp.html获取更多提示, 1)堆栈溢出,参见 https://www.FreeRTOS.org/Stacks-and-stack-overflow-checking.html 2)中断优先级分配不正确,特别是在Cortex-M 系列上,数值较高的优先级值表示实际的中断优先级较低,这似乎有违直觉。 请参阅 https://www.FreeRTOS.org/RTOS-Cortex-M3-M4.html 及 https://www.FreeRTOS.org/a00110.html 。 3)在临界区内部调用 API 函数,或当调度器挂起时调用 API 函数或从中断中调用不以“ FromISR ”结尾的 API 函数。 4)在队列或信号量初始化前或调度器启动前使用它们(中断是否在 vTaskStartScheduler() 调用之前触发? )。 5)如果 FreeRTOS 端口支持中断嵌套,则确保定时器中断的优先级等于或低于 configMAX_SYSCALL_INTERRUPT_PRIORITY。 */for(pxIterator=(ListItem_t*)&(pxList->xListEnd);// 链表遍历是从头到尾pxIterator->pxNext->xItemValue<=xValueOfInsertion;pxIterator=pxIterator->pxNext)// 最终,迭代器指向位置的后面,就是待插入的位置{// 这里没什么可做的,只是在迭代到所需的插入位置。/* There is nothing to do here, just iterating to the wanted insertion position. */}}pxNewListItem->pxNext=pxIterator->pxNext;pxNewListItem->pxNext->pxPrevious=pxNewListItem;pxNewListItem->pxPrevious=pxIterator;pxIterator->pxNext=pxNewListItem;/* Remember which list the item is in. This allows fast removal of the item later. */pxNewListItem->pxContainer=pxList;// 记住该项目所在的列表。这有助于日后快速移除该项目。(pxList->uxNumberOfItems)++;// 本链表里的节点数目加 1}// vListInsert

(68)PPT:

++

++

++

++

(69)列表里的相关函数:

++

++

++上面有代码版 :

++

++

++

++

++

(70)例题源码:

(71)

谢谢

返回列表