GNU ARM匯編--(十四)GNU ARM匯編下做任務調(diào)度
[cpp]view plaincopy
- .text
- .globalEntryTask3
- Feq_Table:
- .word20
- .word40
- .word60
- .word80
- .word100
- .word120
- .word140
- .word160
- .word180
- .word200
- .word220
- .word240
- CurrentFeq:
- .word0x0
- task3_delay:
- ldrr3,=0xffffff
- task3_delay1:
- subr3,r3,#1
- cmpr3,#0x0
- bnetask3_delay1
- movpc,lr
- EntryTask3:
- loopfeq:
- ldrr1,=TCON
- ldrr2,=(DZ_eable<<4)|(auto_reload<<3)|(inverter<<2)|(man_update<<1)|(stop<<0)
- strr2,[r1]
- ldrr2,=GPBCON
- ldrr1,[r2]
- //ldrr1,=0x15400
- bicr1,r1,#0x3
- orrr1,r1,#0x2
- strr1,[r2]
- ldrr1,=TCFG0
- ldrr2,=(Prescaler0<<0)
- strr2,[r1]
- ldrr1,=TCFG1
- ldrr2,=(DMA_MODE<<20)|(MUX0<<0)
- strr2,[r1]
- ldrr3,=CurrentFeq
- ldrr0,[r3]
- ldrr4,=Feq_Table
- ldrr4,[r4,r0,LSL#2]@用r4存放table中的值
- addr0,r0,#1
- cmpr0,#12
- moveqr0,#0
- strr0,[r3]
- ldrr1,=TCNTB0
- //ldrr4,=100
- strr4,[r1]
- movr4,r4,LSR#2
- ldrr1,=TCMPB0
- //ldrr4,=25
- strr4,[r1]
- ldrr1,=TCON
- ldrr2,=(DZ_eable<<4)|(auto_reload<<3)|(inverter<<2)|(man_update<<1)|(start<<0)
- strr2,[r1]
- ldrr1,=TCON
- ldrr2,=(DZ_eable<<4)|(auto_reload<<3)|(inverter<<2)|(clear_man_update<<1)|(start<<0)
- strr2,[r1]
- bltask3_delay
- bloopfeq
整個編譯出來不到2K,直接在4K的sram中跑.看到的就是led在流水,蜂鳴器在各種頻率.忽然想到了“落霞與孤鶩齊飛”.有了任務調(diào)度,看起來還是很美的.
下一步,利用MMU的MPU功能,改進這個任務調(diào)度,并且任務是單獨編譯的.總大小應該不會超過4K,這樣我就暫時不用看Nandflash的datasheet了.不過遲早是要看的.......
評論