<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

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

          ucOS-II移植到S3C2410筆記之一

          作者: 時(shí)間:2016-11-11 來源:網(wǎng)絡(luò) 收藏
          1: 問題: 移植匯編函數(shù):OSStartHighRdy, 如下,但發(fā)現(xiàn)只有OS_TaskIdle一個(gè)任務(wù)時(shí),都不能正確運(yùn)行。
          .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í)驗(yàn),刪掉如下代碼(OSRunning=1,即上面紅色部分代碼)后,系統(tǒng)正常。

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

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


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

          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();