• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 新聞中心

    EEPW首頁 > 光電顯示 > 設計應用 > 基于ARM7支持觸摸屏和實時操作系統的開發與應用

    基于ARM7支持觸摸屏和實時操作系統的開發與應用

    —— Development and Application of Touching Screen and RTOS Based on ARM7
    作者:李廣榮 宗文波 韓建超 楊丹 于海濱 劉锏澤 北京衛星制造廠 時間:2011-02-22 來源:電子產品世界 收藏

      C/OS-II嵌入式操作系統的移植

    本文引用地址:http://www.czjhyjcfj.com/article/117094.htm

      C/OS-II作為操作系統的內核,主要的任務就是完成多任務之間的調度和同步,協調各個硬件源不會沖突。與其它嵌入式操作系統相比,它具有系統透明、可拆減、接口簡單的特點。下面就如何在進行操作系統移植和修改作簡要的描述:

      (1)重新修改OS_CPU.H文件

      a)定義數據類型:C/OS-Ⅱ不使用C語言中的short、int、long等與處理器類型有關的數據類型,而代之以移植性強的數據類型,這樣既直觀又便于移植;

      b)定義堆棧增長類型和ARM運行的模式:雖然ARM處理器對堆棧向上與向下的兩種增長方式都予以支持,但由于編譯器ADS僅支持堆棧從上往下,并且必須是滿遞減堆棧,所以在文件中用來定義堆棧增長方式的常量OS_STK_GROWTH 的值為1;

      c)需對外部函數聲明:如在C/OS-II.h頭文件中,有些要移植的函數已經聲明,包括:OSTaskStkInit()、OSIntCtxSw(void)、OSStartHighRdy(void) 。

      (2)修改OS_CPU_C.C文件

      a)任務堆棧初始化函數OSTaskStkInit():在編寫任務堆棧初始化函數OSTaskStkInit()之前,必須先根據處理器的結構和特點確定任務的堆棧結構;

      b)鉤子函數:C/OS-II為了用戶在系統函數中書寫自己的代碼而預置了一些鉤子函數(如OSTimeTickHook),這些函數在移植時可全為空函數,可根據用戶的需要添加。

      (3)重點編寫OS_CPU_A.S文件

      a)開/關中斷函數:在處理器核中可利用改變程序狀態寄存器CPSR中的相應控制位實現;

      b)OSStartHighRdy(void):OSStart()函數調用OSStartHighRdy()來使就緒態任務中優先級最高的任務開始執行;

      c)OS_TASK_SW(void):μC/OS-II通過調用OSSched()函數來完成任務調度的,OSSched()先將最高優先級任務的地址裝載到OSTCBHighRdy,再通過調用OS_TASK_SW()執行任務級的任務切換,OS_TASK_SW主要完成保護現場,完成用于的任務,恢復現場;

      d)OSIntCtxSw(void):OSIntExit()通過調用OSIntCtxSw(),在中斷服務程序中執行任務切換功能。

      e)時鐘節拍函數:在本移植中,只使用了ARM的IRQ中斷。由于不同的ARM芯片的中斷系統并不完全一樣,因此不可能編寫出對所有使用ARM核的處理器通用的中斷及節拍移植代碼,但是這是后續任務管理中重點需要操作系統進行處理的,OSTickISR的實現代碼見程序清單。

      程序清單 OSTickISR()

      OSTickISR

      STMFD SP!, {R0-R3,R12,LR}

      BL      OSIntEnter

      BL      user_function    ;調用用戶

                 處理的中斷處理程序

      BL      OSIntExit

      LDMFD SP!,{R0-R3,R12,LR}

      SUBS PC,LR,#4


    上一頁 1 2 3 4 下一頁

    關鍵詞: 觸摸屏 ARM7 S3C44B0

    評論


    相關推薦

    技術專區

    關閉
    主站蜘蛛池模板: 东台市| 乐亭县| 新干县| 甘谷县| 镇赉县| 湟源县| 福州市| 临邑县| 剑河县| 石屏县| 噶尔县| 平南县| 大同县| 怀柔区| 文昌市| 万荣县| 滨州市| 广安市| 普陀区| 兴业县| 兴义市| 渝北区| 灵川县| 韩城市| 泸州市| 普兰县| 北海市| 康马县| 奎屯市| 禹州市| 南通市| 中江县| 拜城县| 焦作市| 甘孜| 新巴尔虎左旗| 彩票| 依兰县| 青河县| 石林| 沙河市|