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

网站建设的好不好东莞做网站哪家好

网站建设的好不好,东莞做网站哪家好,wordpress图片本地化工具,企点qq官网2.FREERTOS任务创建、内核链表初始化硬件环境#xff1a;cortex m4FreeRTOS版本:v8.0.1今天开始阅读freertos#xff0c;阅读同时做下笔记#xff0c;等哪天碰到移植问题再翻出来看看。2.1 任务、链表结构体源码中使用tskTCB来存储一个任务的所有信息#xff0c;xLIST存储内…2.FREERTOS任务创建、内核链表初始化硬件环境cortex m4FreeRTOS版本:v8.0.1今天开始阅读freertos阅读同时做下笔记等哪天碰到移植问题再翻出来看看。2.1 任务、链表结构体源码中使用tskTCB来存储一个任务的所有信息xLIST存储内核链表数据。一个系统最基本的功能是它的任务调度在任务切换时最重要的则是内核链表用图描述下这两个结构体这样看起来比代码更清晰。(TCB中有省略成员)(TCB结构体)-------------------------------------------------分割线----------------------------------------------------(LIST结构体)一个TCB中包含了两个xLIST_ITEM作为链表节点操作xLIST_ITEM中的指针指向既为控制一个任务进出某个链表。相比xLIST_ITEM在xLIST中使用了精简版的结点xMINI_LIST_ITEM。2.2 xTaskGeneEricCreate 任务创建流程分析xTaskGeneEricCreate 函数用来创建一个新任务在调度器启动前和启动后都可以创建。Freertos在调度器启动后至少会有一个任务(IDLE)处于准备调度状态即使开发者不去创建自己的任务。xTaskGeneEricCreate源码流程(拖动可以放大图片)(任务创建流程图)2.2.1 prvAllocateTCBAndStack 分配空间Freertos使用pvPortMalloc在堆上分配一块TCB大小的内存空间分配成功后还要使用pvPortMalloc分配一块内存当做任务运行所需要的栈空间。这些空间直到任务被删除时才会得到释放。在栈分配时有参数判断若创建任务时有传入的栈地址则放弃分配。分配的栈内存总大小为栈深度(传入参数)与栈宽度乘积。2.2.2 prvInitialiseTCBVariables 执行初始化prvInitialiseTCBVariables函数中主要执行了任务名字拷贝、优先级保存、两个链表节点初始化。下图表示TCB中节点和链表初始化后指针指向(链表及TCB初始化后)2.2.3 pxPortInitialiseStack 执行”压栈”pxPortInitialiseStack函数执行的代码非常奇特一开始完全无法理解还好在葵花宝典找到了da案神书引用M3权威指南上一句翻译:响应异常的第一个步骤是保存现场硬件自动压栈压栈后内存分布再对比看下pxPortInitialiseStack源码对比下两者动作这个函数是对任务栈进行了一些处理并且是模仿异(中断)常发生时所产生的动作。为什么一定要模仿异常进行压栈首先扯一下freertos任务调度工作的大致流程:当一个任务在运行时还有一个内部定时器(systick)在一直计数它的计数值和时钟频率比值可以看成为时间片。时间片到中断产生中断里进行上下文切换也就是pxReadyTasksLists中的任务被依次调度。硬件进入中断时便会自动压栈不需要我们处理。中断处理完成后到中断返回时硬件还会自动出栈还原进入异常前的状态。进中断时压入的那些寄存器值都被一一出栈 如PC、R0、等寄存器。这样pxPortInitialiseStack函数就好理解了它先对新创建的任务进行手动压栈还多包括了R4-R11那么在调度中断结束后这些手动压入的值将被自动出栈进而使新任务运行起来。PC位置是传入的任务主程序句柄地址也就是我们要任务执行的主要程序LR(返回寄存器)的位置是prvTaskExitError函数地址这个函数里是一个for死循环加错误信息打印也就是一个任务永远不应从它的主程序中跳出如果跳出则进入prvTaskExitError函数打印错误。一般任务句柄里都会用for(;;)把它写死永远循环执行需要退出时要将该任务delete掉。2.3 pxReadyTasksLists链表一个TCB创建并初始化完成后便开始插入pxReadyTasksLists等待被调度。pxReadyTasksLists链表是一个数组优先级最大数决定它的大小。一个处于空闲状态的TCB(准备好被调度)在插入时是an照优先级作为索引插入的这里说TCB插入不太准确应该是TCB上的链表节点插入链表。举个栗子第一个任务插入空链表时的状况看着有些凌乱的话再来张大意图如果此时又有一个相同优先级任务创建链表变为简略图:链表将节点依次连接组成TCB链调度器运行时会an照需要遍历链表进而控制任务。链表头部都带有index元素一开始它指向链表本身所以我们上面创建的任务都像是在尾插事实上调度器运行起来时新节点插入的位置由index决定。图解调度开始后index开始遍历readylist它指向第一个TCB时第一个TCB得到cpu资源开始运行变为注意红色线条变化此时如果动态创建了一个优先级相同的任务TCB3应该把它插在哪里如果插在TCB后面那对于TCB2来说是不公平的因为人家排队等待cpu的时间肯定比TCB3长其实仔细考虑下插在链表头部或尾部都是不规律的只有利用index。Freertos将其插在TCB前面以保证是当前链表最后一个得到cpu资源的位置:新TCB进入链表任务创建流程就快结束了。在程序尾部有些优先级判断如果创建的任务比当前运行的任务优先级要高则使能PendSV中断。如果调度器是停止的则直接更改当前TCB指针。
http://www.pierceye.com/news/541412/

相关文章:

  • 网页网站导读怎么做百度问答兼职怎么做
  • wordpress建站环境报喜鸟集团有限公司网页制作
  • 怎么利用网站赚广告费网站开发服务费入什么科目
  • 求网站2021在线观看设计app的软件
  • 百度文库登录入口昆明网站建设优化技术
  • 江苏建设教育协会网站网络营销专员岗位职责
  • 遂宁门户网站建设先进工作单位帮别人做违法网站会判刑吗
  • 设计公司网站套餐怎么样做短视频
  • 化妆品做网站流程什么是网络营销产品
  • windows搭建php网站推荐商城网站建设
  • php网站开发门槛高吗网络推广网站推广
  • 网站推广的8种方法微信怎么开创公众号
  • 大鹏外贸网站建设海口网站网站建设
  • 手表东莞网站建设技术支持信创网站
  • 中小企业为什么要建网站wordpress特效 插件推荐
  • 好的门户网站龙南建设局网站
  • 深圳住房和建设局官网网站设计导航精选最好的设计网站大全
  • 个人备案网站建设方案书网站开发实训教程
  • 周口网站关键词优化重庆招商网
  • 国内优秀网站设计师江西宜春市城市建设档案馆网站
  • 怎么查看网站用的php还是.networdpress博客页修改
  • 企业查询网站wordpress注册没反应
  • 如何建立自已的购物网站长沙网站制作主要公司
  • 深圳 电子政务网站建设方案WordPress的login在哪里改
  • 网站快速网站推广怎么制作图片视频和配音乐
  • 河南网站制作团队湖南网址大全
  • 2019为网站网站做代理被判缓刑网站信息化建设建议
  • 部署推进网站建设网站域名费用
  • 企业信息门户网站建设方案seo网站模版
  • 谷歌有做网站建设快速建站哪里好