您的位置 首页 观点

GNU ARM汇编–(十四)GNU ARM汇编下做使命调度

以前工作中用过arm7,没有MMU,也没有用任何OS现在回忆当时的代码结构,我觉得可以叫无限循环的有限状态机arm7不跑OS,就相当于单片

曾经工作中用过arm7,没有MMU,也没有用任何OS.现在回想其时的代码结构,我觉得能够叫无限循环的有限状况机.arm7不跑OS,就相当于单片机,单片机跑的肯定是无限死循环.有限状况机是因为整个代码要处理许多外部的工作,那便是大的循环里边来套小循环,以轮询的方法来查看外界的改变,然后体系作出改变,体系在有限的状况中切换.

OS的一个标识便是支撑多使命的并发.比方说linux,咱们看起来是多个进程在一起运转,实际上仍是cpu运转一下这个进程,再运转一下其他进程.这个就涉及到上下文切换以及进程调度的算法.当然我这儿说的是单核的状况,如果是SMP的话,或许有些差异.暂时也没研讨linux下的进程调度,可是经过自己写个最简略的使命调度能够了解使命调度是个什么回事.其实说到底使命调度便是那么回事.听说linux的开始版别,便是两个使命在不断的打印AB…

硬件渠道是s3c2440:

使用RTC的Tick中止,在中止处理中进行使命的调度,调度算法选用最简略的轮循.

其间中心便是中止的写法,PCB的树立和使命调度中使命仓库的保存和康复:

调度的代码参阅《ARM System Developers Guide》一书.

给出scheduler.S的代码:

[cpp]view plaincopy

  1. kernelScheduler:
  2. /*
  3. @—————————————————
  4. @RoundRobinScheduler
  5. @—————————————————
  6. */
  7. CurrentTask:
  8. ldrr3,=PCB_CurrentTask
  9. ldrr0,[r3]
  10. ldrr1,=PCB_Table
  11. ldrr1,[r1,r0,LSL#2]
  12. ldrr2,=PCB_PtrCurrentTask
  13. strr1,[r2]
  14. /*
  15. @**PCB_PtrCurrentTask-updatedwiththenewaddress
  16. */
  17. NextTask:
  18. addr0,r0,#1
  19. cmpr0,#3
  20. moveqr0,#0
  21. strr0,[r3]
  22. ldrr1,=PCB_Table
  23. ldrr1,[r1,r0,LSL#2]
  24. ldrr0,=PCB_PtrNextTask
  25. strr1,[r0]
  26. /*
  27. @**PCB_PtrCurrentTask=currentPCB
  28. @**PCB_PtrNextTask=nextPCB
  29. @**PCB_CurrentTask=newTASK_ID
  30. @——————————————————
  31. @ContextSwitch
  32. @——————————————————
  33. */
  34. handler_contextswitch:
  35. ldmfdsp!,{r0-r12,r14}
  36. ldrr13,=PCB_PtrCurrentTask
  37. ldrr13,[r13]
  38. subr13,r13,#60
  39. stmiar13,{r0-r14}^
  40. mrsr0,SPSR
  41. stmdbr13,{r0,r14}
  42. ldrr13,=PCB_PtrNextTask
  43. ldrr13,[r13]
  44. subr13,r13,#60
  45. ldmdbr13,{r0,r14}
  46. msrspsr_cxsf,r0
  47. ldmiar13,{r0-r14}^
  48. ldrr13,=PCB_TopOfIRQStack
  49. ldrr13,[r13]
  50. movspc,r14
  51. .end

总共写了3个静态使命,第一个使命做一个简略的算术运算,第二个使命是一个流水灯,而第三个使命是使用蜂鸣器来发生旋律.

仅贴出第三个使命的代码:

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/news/guandian/258034.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部