<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > ucOS-II移植到S3C2410筆記之一

ucOS-II移植到S3C2410筆記之一

作者: 時(shí)間:2016-11-11 來(lái)源:網(wǎng)絡(luò ) 收藏
1: 問(wèn)題: 移植匯編函數:OSStartHighRdy, 如下,但發(fā)現只有OS_TaskIdle一個(gè)任務(wù)時(shí),都不能正確運行。
.globl OSStartHighRdy
.type OSStartHighRdy, %function
OSStartHighRdy:

/* C variable OSRunning = TRUE */

mov r0, #1
ldr r1, =OSRunning
str r0, [r1]

/* get the stack pointer of task that will be running. */
ldr r5, =OSTCBHighRdy /* R0= the address of pointer variable OSTCBHighRdy */
ldr r6, [r5] /* R1= the the value of pointer variable OSTCBHighRdy= OS_TCB(TaskIdle) */
ldr r7, [r6] /* R2= the value of pointer variable OS_TCB->OSTCBStkPtr, the value is address*/
/*ldr r8, [r7]*/ /* R3= the value of pointer*/

mov sp, r7 /* restore SP*/

ldr r1, [sp, #0]
msr cpsr, r1 /* restore CPSR */

add sp, sp, #4 /* pointer to R0 location */
ldmia sp!,{r0-r12, lr, pc} /* restore R0-R12, LR, PC */

2:實(shí)驗,刪掉如下代碼(OSRunning=1,即上面紅色部分代碼)后,系統正常。

3:分析
說(shuō)明系統是在執行OSRunning=1對應的匯編代碼出現異常,于是查看變量OSRunning的定義:
ucos_ii.h:451:OS_EXT BOOLEAN OSRunning;
再查看BOOLEAN的原始類(lèi)型:
os_cpu.h:42:typedef unsigned char BOOLEAN;
即變量OSRunning是unsigned char類(lèi)型,至此,問(wèn)題的原因已經(jīng)找到,即錯誤的使用了匯編指令。
因為匯編訪(fǎng)問(wèn)C語(yǔ)言的變量時(shí),需要根據變量的類(lèi)型,而確定其匯編指令,這里應該使用:ldrb/strb
4: 修正后的代碼
mov r0, #1
ldrb r1, =OSRunning
strb r0, [r1]
5: 總結
匯編在訪(fǎng)問(wèn)C語(yǔ)言的變量時(shí),需要根絕變量的類(lèi)型使用不同的匯編指令:

unsigned char -----------------------> LDRB/STRB
unsigned short -----------------------> LDRH/STRH
unsigned int -----------------------> LDR/STR
char -----------------------> LDRSB/STRSB
short -----------------------> LDRSH/STRSH


關(guān)鍵詞: ucOS-II移植S3C241

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>