新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > GNU ARM匯編--(十四)GNU ARM匯編下做任務調(diào)度

GNU ARM匯編--(十四)GNU ARM匯編下做任務調(diào)度

作者: 時間:2016-11-26 來源:網(wǎng)絡 收藏
[cpp]view plaincopy
  1. .text
  2. .globalEntryTask3
  3. Feq_Table:
  4. .word20
  5. .word40
  6. .word60
  7. .word80
  8. .word100
  9. .word120
  10. .word140
  11. .word160
  12. .word180
  13. .word200
  14. .word220
  15. .word240
  16. CurrentFeq:
  17. .word0x0
  18. task3_delay:
  19. ldrr3,=0xffffff
  20. task3_delay1:
  21. subr3,r3,#1
  22. cmpr3,#0x0
  23. bnetask3_delay1
  24. movpc,lr
  25. EntryTask3:
  26. loopfeq:
  27. ldrr1,=TCON
  28. ldrr2,=(DZ_eable<<4)|(auto_reload<<3)|(inverter<<2)|(man_update<<1)|(stop<<0)
  29. strr2,[r1]
  30. ldrr2,=GPBCON
  31. ldrr1,[r2]
  32. //ldrr1,=0x15400
  33. bicr1,r1,#0x3
  34. orrr1,r1,#0x2
  35. strr1,[r2]
  36. ldrr1,=TCFG0
  37. ldrr2,=(Prescaler0<<0)
  38. strr2,[r1]
  39. ldrr1,=TCFG1
  40. ldrr2,=(DMA_MODE<<20)|(MUX0<<0)
  41. strr2,[r1]
  42. ldrr3,=CurrentFeq
  43. ldrr0,[r3]
  44. ldrr4,=Feq_Table
  45. ldrr4,[r4,r0,LSL#2]@用r4存放table中的值
  46. addr0,r0,#1
  47. cmpr0,#12
  48. moveqr0,#0
  49. strr0,[r3]
  50. ldrr1,=TCNTB0
  51. //ldrr4,=100
  52. strr4,[r1]
  53. movr4,r4,LSR#2
  54. ldrr1,=TCMPB0
  55. //ldrr4,=25
  56. strr4,[r1]
  57. ldrr1,=TCON
  58. ldrr2,=(DZ_eable<<4)|(auto_reload<<3)|(inverter<<2)|(man_update<<1)|(start<<0)
  59. strr2,[r1]
  60. ldrr1,=TCON
  61. ldrr2,=(DZ_eable<<4)|(auto_reload<<3)|(inverter<<2)|(clear_man_update<<1)|(start<<0)
  62. strr2,[r1]
  63. bltask3_delay
  64. bloopfeq
第三個任務就是每隔一段時間就有新的頻率產(chǎn)生.

整個編譯出來不到2K,直接在4K的sram中跑.看到的就是led在流水,蜂鳴器在各種頻率.忽然想到了“落霞與孤鶩齊飛”.有了任務調(diào)度,看起來還是很美的.

下一步,利用MMU的MPU功能,改進這個任務調(diào)度,并且任務是單獨編譯的.總大小應該不會超過4K,這樣我就暫時不用看Nandflash的datasheet了.不過遲早是要看的.......


上一頁 1 2 下一頁

評論


技術專區(qū)

關閉