当前位置: 首页 > news >正文

做暧暖ox网站网站开发公司市场

做暧暖ox网站,网站开发公司市场,南京广告公司黄页,成品影视app开发方案任务概念 什么是任务 任务是一个参数为指针,无法返回的函数,函数体为死循环不能返回任务的实现过程 每个任务是独立的,需要为任务分别分配栈称为任务栈,通常是预定义的全局数组,也可以是动态分配的一段内存空间&#…

任务概念

  1. 什么是任务
    任务是一个参数为指针,无法返回的函数,函数体为死循环不能返回
  2. 任务的实现过程
    每个任务是独立的,需要为任务分别分配栈称为任务栈,通常是预定义的全局数组,也可以是动态分配的一段内存空间,都是在RAM区。
    任务栈的定义:类型是StackType_t 例如StackType_t Task1Stack[128]是定义了一个名为Task1Stack,大小为128字,512字节的栈。
    任务控制块:存放着任务栈指针,任务名称,形参;通过任务控制块控制任务的运行。在task文件里面定义了任务控制块的结构体TCB_t。裁剪后的任务控制块:其中ListItem_t列表项
    在这里插入图片描述
    在List文件中定义了列表xLIST。列表的第一个和最后一个是检查列表完整性的,默认不开启,暂时用不到,第二个是记录列表项的数量,第三个是列表的记录当前列表项的索引,可以通过这个来遍历列表(类似链表),第四个指定最后一个列表项。
    在这里插入图片描述
    列表项:xLIST_ITEM,第一个和最后一个元素是检查列表项完整性的,默认不开启。第二个是列表项保存的值,第三个是指向下一个列表项,第四个是指向上一个列表项,第五个指向此列表项的拥有者(谁创建的),第六个是列表项当前存在的列表(此列表项在哪里)。
    在这里插入图片描述
    迷你列表项xMINI_LIST_ITEM:第一个是检查迷你列表项的完整性,暂时没用到,第二个是迷你列表项中的值,第三个是指向下一个列表项,第四个是指向上一个列表项。实际上就是列表项少了一个元素,因为有些场景不需要列表项全部的元素即可完成功能,为了节省内存就用迷你列表项。

在这里插入图片描述
列表的初始化:列表的最后一个列表项是不计入列表项数量的,相当于头结点链表的头结点。开始只有一个end列表项,所以(1)pxIndex索引指向end。(2)值默认初始化为全f。(3)(4)一个项的上下一项都是指向自己,(5)(6)列表项个数初始化为0.剩下两项是初始化列表完整性检查字段。
在这里插入图片描述
列表项的初始化只需要把pvContainer初始化为NULL就行,其他函数会初始化如任务创建函数。
在这里插入图片描述
插入列表项函数源码介绍:

void vListInsert( List_t * const pxList, ListItem_t * const pxNewListItem )
{
ListItem_t *pxIterator;
const TickType_t xValueOfInsertion = pxNewListItem->xItemValue;//根据值选择插入位置/* Only effective when configASSERT() is also defined, these tests may catchthe list data structures being overwritten in memory.  They will not catchdata errors caused by incorrect configuration or use of FreeRTOS. */listTEST_LIST_INTEGRITY( pxList );//列表完整性检查断言实现,可不看listTEST_LIST_ITEM_INTEGRITY( pxNewListItem );/* Insert the new list item into the list, sorted in xItemValue order.If the list already contains a list item with the same item value then thenew list item should be placed after it.  This ensures that TCB's which arestored in ready lists (all of which have the same xItemValue value) get ashare of the CPU.  However, if the xItemValue is the same as the back markerthe iteration loop below will not end.  Therefore the value is checkedfirst, and the algorithm slightly modified if necessary. */if( xValueOfInsertion == portMAX_DELAY )//如果等于最大值就直接插到最后{pxIterator = pxList->xListEnd.pxPrevious;}else{/* *** NOTE ***********************************************************If you find your application is crashing here then likely causes arelisted below.  In addition see http://www.freertos.org/FAQHelp.html formore tips, and ensure configASSERT() is defined!http://www.freertos.org/a00110.html#configASSERT1) Stack overflow -see http://www.freertos.org/Stacks-and-stack-overflow-checking.html2) Incorrect interrupt priority assignment, especially on Cortex-Mparts where numerically high priority values denote low actualinterrupt priorities, which can seem counter intuitive.  Seehttp://www.freertos.org/RTOS-Cortex-M3-M4.html and the definitionof configMAX_SYSCALL_INTERRUPT_PRIORITY onhttp://www.freertos.org/a00110.html3) Calling an API function from within a critical section or whenthe scheduler is suspended, or calling an API function that doesnot end in "FromISR" from an interrupt.4) Using a queue or semaphore before it has been initialised orbefore the scheduler has been started (are interrupts firingbefore vTaskStartScheduler() has been called?).**********************************************************************/for( pxIterator = ( ListItem_t * ) &( pxList->xListEnd ); pxIterator->pxNext->xItemValue <= xValueOfInsertion; //否则找出位置pxIterator = pxIterator->pxNext ) /*lint !e826 !e740 The mini list structure is used as the list end to save RAM.  This is checked and valid. */{/* There is nothing to do here, just iterating to the wantedinsertion position. */}}pxNewListItem->pxNext = pxIterator->pxNext;//上面确定了pxIterator就是该插入的位置,但是只是确定了pxIterator->pxNext,所以这里先赋值pxNextpxNewListItem->pxNext->pxPrevious = pxNewListItem;//把该位置的下一项的前一项改为插入项pxNewListItem->pxPrevious = pxIterator;//把pxIterator赋给该位置的上一项(重点)pxIterator->pxNext = pxNewListItem;//把该位置的上一项的下一项改为插入项完成了双向链表的插入/* Remember which list the item is in.  This allows fast removal of theitem later. */pxNewListItem->pvContainer = ( void * ) pxList;//添加列表项的位置是这个列表( pxList->uxNumberOfItems )++;//项数+1
}

列表遍历过程:从第一个(end->next)开始,如果pxIterm->next不等于end继续遍历,如果等于end则跳过end回到第一个就完成了一次遍历。

http://www.yayakq.cn/news/280918/

相关文章:

  • 网站开发 入门东莞专业微网站建设价格
  • 东莞专业的单位网站建设机关事业单位网站建设
  • 网站维护目标北京网站制作一般多少钱
  • 网站模板好wordpress数据库破解版
  • asp.net旅游网站管理系统代码网站的客户体验
  • 汉阳网站推广wordpress网站静态化
  • wordpress 商城站下载网站设计建设那家好
  • 如何在电脑上建网站网站宣传营销
  • 怎么做淘宝网站赚钱技巧图片制作视频的app
  • 珠海科技网站建设哈尔滨网站建设技术托管
  • 品牌网站建设的关键要点网站建设深圳哪家好
  • 丽水网站开发公司网页设计与制作读书心得体会1000字
  • 廊坊网站推广外包郑州公司网站建设
  • 深圳公司网站设网站seo思路
  • 网站内容策划方案龙岗网站的建设
  • 广西工程建设质量安全管理协会网站兰州做网站优化
  • 南京网站如何制作重庆在线直播
  • 惠州网站模板建站广州越秀公司网站建设
  • 专门做衣服特卖的网站工商公示系统查询入口
  • 做网站需要什么素材wordpress 安装 windows
  • 营销型外贸网站建设云南住房和建设厅网站首页
  • 网站备案核验号网站建设有什么需求
  • 课程网站建设规划互联网网站备案表
  • 网站布局框架wordpress视频站插件
  • wordpress首页评论优化大师电脑版官网
  • 做化妆品网站的原因user post wordpress
  • 自己建网站数据怎么做制作网页无法铺平
  • 泰州网站制作维护网络营销学院
  • 做窗帘网站班级网站html代码
  • 网站广告代理如何做织梦网站怎样上传到ftp