ARM微處理器的uC/OS的移植設計

2020-12-05 電子產品世界

概述

本文引用地址:http://www.eepw.com.cn/article/201609/304152.htm

嵌入式作業系統μC/OS-II是一個公開原始碼的佔先式多任務的微內核RTOS,其特點可以概括為以下幾個方面:公開原始碼,代碼結構清晰、明了,注釋詳盡,組織有條理,可移植性好,可裁剪,可固化。內核屬於搶佔式,最多可以管理60個任務。目前國內對μC/OS-II的研究和應用都很多。只要買一本書就可獲得原始碼,對學校和教育的使用完全免費,商業應用的費用相對也很低。所以對μC/OS-II實時作業系統的學習研究、開發、應用具有重要意義。

大部分的μC/OS-II代碼是使用ANSI C語言書寫的,因此μC/OS-II的可移植性好,然而仍需要使用C和彙編語言寫一些處理器相關代碼。μC/OS-II的移植需要滿足以下要求:

(1)處理器的C編譯器可以產生可重入代碼;

(2)可以使用C調用進入和退出臨界區代碼;

(3)處理器必須支持硬體中斷,並且需要一個定時中斷源;

(4)處理器需要能夠容納一定數據的硬體堆棧;

(5)處理器需要有能夠在CPU寄存器與內核和堆棧交換數據的指令。

基於ARM7的S3C44B0X處理器完全滿足上述要求。它使用ARM公司的16位/32位RISC結構,內核是arm7TDMI,工作在66MHz,片上集成了以下部件:8K Cache、外部存儲器控制器、LCD控制器、4個DMA通道、2個UART、1個多主I2C總線控制器、1個I2C總線控制器,以及5通道PWM定時器和1個內部定時器、8通道12位ADC等,能夠與常用的外圍設備實現無縫連接,功能強大。目前,國內應用較為廣泛。

1內核的移植

μC/OS-II的移植只需要修改與處理器相關的代碼就可以了。具體有如下內容:

(1)os_cpu.h中需要設置一個常量來標識堆棧增長方向;

(2)os_cpu.h中需要聲明幾個用於開關中斷和任務切換的宏;

(3)os_cpu.h中需要針對具體處理器的字長重新定義一系列數據類型;

(4)os_cpu_a.asm需要改寫4個彙編語言的函數;

(5)os_cpu_c.c需要用c語言編寫6個簡單函數;

(6)修改主頭文件include.h,將上面的三個文件和其他自己的頭文件加入。

完成上述工作後,μC/OS-II就可以運行在arm處理器上了。

2 LwIP的移植

μC/OS-II本身沒有TCP/IP協議棧,目前的一些第三方TCP/IP支持都是完全商業化的,很少給出原始碼,影響了μC/OS-II的研究和推廣。通過把開放原始碼的TCP/IP協議棧LwIP移植到μC/OS-II上來,就獲得了一套可免費研究、學習的嵌入式網絡軟體平臺。

2.1 Lwip的作業系統封裝層(operating system.emulation layer)

Lwip為了適應不同的作業系統,在代碼中沒有使用和某一個作業系統相關的系統調用和數據結構。而是在lwip和作業系統之間增加了一個作業系統封裝層。作業系統封裝層為作業系統服務(定時,進程同步,消息傳遞)提供了一個統一的接口。在lwip中進程同步使用semaphone和消息傳遞採用」mbox」。作業系統封裝層的原代碼在…/lwip/src/core/sys.c中。而和具體的作業系統相關的代碼在../lwip/src /arch/sys_arch.c中。

作業系統封裝層的主要函數如下:

void sys_init(void)//系統初始化

sys_thread_t sys_thread_new(void (* function)(void *arg), void *arg,int prio)//創建一個新進程

sys_mbox_t sys_mbox_new(void)//創建一個郵箱

void sys_mbox_free(sys_mbox_t mbox)//釋放並刪除一個郵箱

void sys_mbox_post(sys_mbox_t mbox, void *data) //發送一個消息到郵箱

void sys_mbox_fetch(sys_mbox_t mbox, void **msg)//等待郵箱中的消息

sys_sem_t sys_sem_new(u8_t count)//創建一個信號量

void sys_sem_free(sys_sem_t sem)//釋放並刪除一個信號量

void sys_sem_signal(sys_sem_t sem)//發送一個信號量

void sys_sem_wait(sys_sem_t sem)//等待一個信號量

void sys_timeout(u32_t msecs, sys_timeout_handler h, void *arg)//設置一個超時事件

void sys_untimeout(sys_timeout_handler h, void *arg)//刪除一個超時事件

關於作業系統封裝層的信息可以閱讀lwip的doc目錄下面的sys_arch.txt.文件。

2.2 Lwip在μC/OS-II上的移植.

2.2.1 系統初始化sys_int()

sys_int必須在tcpip協議棧任務tcpip_thread創建前被調用。

2.2.2 創建一個和tcp/ip相關新進程sys_thread_new()

lwip中的進程就是μC/OS-II中的任務,注意宏LWIP_STK_SIZE是tcp/ip相關任務的堆棧大小,可以根據情況自己設置,我設置成10*1024,因為44b0X開發板上有8M的sdram;而宏LWIP_TASK_MAX是tcp/ip相關的任務最多數目;LWIP_START_PRIO 是tcp/ip相關任務的起始優先級,tcpip_thread在所有tcp/ip相關進程中應該是優先級最高的;另外tcpip_thread應該是最先創建的。

2.2.3 Lwip中的定時事件

在tcp/ip協議中很多時候都要用到定時,定時的實現也是tcp/ip協議棧中一個重要的部分。 LwIP中每個與外界網絡連接的線程都有自己的timeout屬性,即等待超時時間。這個屬性表現為每個線程都對應一個sys_timeout結構體隊列,包括這個線程的timeout時間長度,以及超時後應調用的timeout函數,該函數會做一些釋放連接,回收資源的工作。如果一個線程對應的 sys_timeout為空(NULL),說明該線程對連接做永久的等待。timeout結構體已經由LwIP自己在sys.h中定義好了,而且對結構體隊列的數據操作也由LwIP負責,我們所要實現的是如下函數:

struct sys_timeouts * sys_arch_timeouts(void)

這個函數的功能是返回目前正處於運行態的線程所對應的timeout隊列指針。timeout隊列屬於線程的屬性,因此是OS相關的函數,只能由用戶實現。

2.2.4 「mbox」的實現:

LwIP使用消息隊列來緩衝、傳遞數據報文,因此要在sys_arch中實現消息隊列結構sys_mbox_t,以及相應的操作函數:

sys_mbox_new() //創建一個消息隊列

sys_mbox_free() //釋放一個消息隊列

sys_mbox_post() //向消息隊列發送消息

sys_arch_mbox_fetch() //從消息隊列中獲取消息

相關焦點

  • 嵌入式作業系統移植實例:使用ADS移植uC/OS-II
    選擇開發工具在嵌入式系統設計中,開發工具的選取是一個重要的考慮因素,通常這是與開發項目的需求和應用背景相關。一般嵌入式開發工具包含用於目標系統的交叉編譯器、連接器、調試器以及輔助處理用的二進位文件分析工具等。
  • net-snmp移植到arm
    關於net-snmp的移植,是基於靜態編譯的,動態的沒有做成功,在arm上的移植過程大致如下:如果沒有涉及到擴展agent,則藍色字體不需要理會。tar -xzvf net-snmp-5.4.1.tar.gz,若想擴展agent,則可以將此模塊的.c和.h文件先放到net-snmp-5.4.4/agent/mibgroup下一起配置編譯;例如我這裡想用代理讀寫encoder模塊,那麼先將寫好的encoder源文件複製到net-snmp-5.4.4/agent/mibgroup路徑下;2.CC=arm-linux-gcc
  • uC/OS-II在EP7312上的移植
    首先,把μC/OS-II移植到自己的硬體目標板上,寫出相應的驅動程序以及用戶圖形界面等等;在這些接口函數之上,加上用戶自己的應用程式,就構成了嵌入式軟體。2 μC/OS-II在EP7312上的移植  μC/OS-II的移植條件是:只要該處理器有堆棧,有CPU內部寄存器入棧、出棧指令;使用的C編譯器支持內嵌彙編(inline assembly)或者該C語言可擴展,可連接彙編模塊,使得關中斷、開中斷能在C語言程序中實現。
  • UC/OS-II內核調度分析
    之所以使用實時內核可以大大簡化應用系統的設計,是因為實時內核允許將應用分成若干個任務,由實時內核來管理它們。內核本身也增加了應用程式的額外負荷,代碼空間增加ROM的用量,內核本身的數據結構增加了RAM的用量。但更主要的是,每個任務要有自己的棧空間,這一塊吃起內存來是相當厲害的。內核本身對CPU的佔用時間一般在2到5個百分點之間。
  • 現場總線的開關量 I/O 模塊的總體方案設計
    ●嵌入式Linux軟體設計開發流程第一,建立開發環境作業系統一般使用RedHatLinux,版本從7到9都可以,選擇定製安裝或全部安裝,通過網絡下載相應的GCC交叉編譯器機型安裝(例如arm - Linux-gcc、arm-uclibc-gcc),或者安裝產品廠家提供的交叉編譯器。
  • ARM開發板上uClinux內核移植
    因此,正確建立uClinux的移植的前提條件是具備一個與uClinux配套、易於使用的 Bootloader。然而,將Bootloader與內核分開設計能夠使軟體架構更加清晰,也有助於靈活地支持多種引導方式,實現一些有用的輔助功能。
  • 基於ARM920T微處理器的IDE硬碟接口設計與實現
    本文針對一款基於ARM920T晶片的開發板,根據ATA硬碟接口規範,設計了IDE硬碟接口電路,實現了對IDE硬碟的讀寫,可以在Linux系統中對其上的文件系統自由訪問,達到了高速率和高可靠性的要求。2 ARM920T與S3C2410介紹ARM 包括一系列微處理晶片技術。
  • 淺談嵌入式在地鐵雜散電流監測裝置的設計
    ,圖1是自行設計的一個實驗室模擬地下鐵道雜散電流的產生和對地下金屬腐蝕作用的實驗裝置。ucosII具有可裁減的體系結構,μC/OS-II是一種可移植的,可植入ROM的,可裁剪的,搶佔式的,實時多任務作業系統內核。它被廣泛應用於微處理器、微控制器和數位訊號處理器。嚴格地說uC/OS-II只是一個實時作業系統內核,它僅僅包含了任務調度,任務管理,時間管理,內存管理和任務間的通信和同步等基本功能。沒有提供輸入輸出管理,文件系統,網絡等額外的服務。
  • 嵌入式實時作業系統 μC/OS-II 在S12單片機上的移植
    1 引言在採用前後臺系統軟體設計模式的嵌入式系統中,主程序是一個無限循環,單任務順序執行,通過設置一個或多個中斷來處理異步事件。這種系統對於簡單的應用是可以的,但對於實時性要求比較高的、處理任務較多的應用,就會暴露出實時性差、系統可靠性低、穩定性差等缺點。
  • ARM指令學習筆記
    要學arm指令集,首先要了解什麼是arm。眾所周知arm是advancedRISCmachines。而risc又是什麼東西呢?即:reducedinstructionsetcomputer,精簡指令集計算機。是一種是一種執行較少類型計算機指令的微處理器,起源於80年代的MIPS主機。
  • 一文看懂arm架構和x86架構有什麼區別
    本文主要介紹的是arm架構和x86架構的區別,首先介紹了ARM架構圖,其次介紹了x86架構圖,最後從性能、擴展能力、作業系統的兼容性、軟體開發的方便性及可使用工具的多樣性及功耗這五個方面詳細的對比了arm架構和x86架構的區別,具體的跟隨小編一起來了解一下。
  • 基於CAN總線的運動控制系統設計
    1.1 整體硬體設計 主節點整體硬體結構如圖2所示。 3 軟體設計 3.1 U-Boot移植 U-Boot(Universal Boot Loader)是遵循GPL條款的開放源碼項目。從FADSROM、8xxROM、PPCBOOT逐步發展演化而來,支持多種嵌入式作業系統內核與微處理器系列。U-Boot的啟動過程:初始化目標板硬體。給嵌入式作業系統提供板上硬體資源信息,加載、引導嵌入式作業系統。
  • 提高uc/os-ii系統安全性與穩定性
    而μC/OS-II官網提供的基於Cortex-M3內核移植的μC/OS-II作業系統,一直運行在特權級下,用戶程序也可以訪問作業系統的變量和常量,導致系統的安全性與穩定性變得更差。1 開發壞境與Cortex-M3內核簡介使用IAR 5.30開發環境,移植μC/OS-II 2.86到Cortex-M3內核上,選用配置了MPU的LPC1786處理器作為硬體實驗平臺。
  • arm開發板與樹莓派有什麼區別
    ARM   ARM是英國的一個公司,主要設計ARM系列的處理器。   arm是一款處理器也可以說是單片機,是功能比較強大的單片機。硬體開發者主要是設計、改良硬體和為新老硬體編寫驅動程序等等,軟體開發者主要是在現有的硬體下開發軟體(通常不包括驅動程序),使用者使用現有硬體和軟體而不進行開發。   我之前使用的 arm11 開發板,主要的目標用戶是硬體開發者和軟體開發者(可以不嚴謹地統稱為嵌入式開發者),幾乎沒有使用者,因為對於沒有開發經驗的人,用戶體驗是很差的。
  • 基於ARM與MEMS器件的微慣性測量裝置設計
    本設計是一種基於MEMS器件的生物運動微慣性測量裝置。利用該裝置實現了對SPC-III機器魚尾鰭拍動參數的精確測量,為國內首次利用MEMS器件進行的活體魚尾鰭拍動參數測量實驗打下了基礎,為機器魚仿生推進設計理論提供支撐。
  • 淺談avr和arm的區別
    AVR單片機獨有的「以定時器/計數器(單)雙向計數形成三角波,再與輸出比較匹配寄存器配合,生成佔空比可變、頻率可變、相位可變方波的設計方法(即脈寬調製輸出PWM)」更是令人耳目一新。   AVR單片機具有多種省電休眠模式,且可寬電壓運行(5-1.8V),抗幹擾能力強,可降低一般8位機中的軟體抗幹擾設計工作量和硬體的使用量。
  • arm 微學術 架構_arm彙編 - CSDN
    @ goto 當前位置執行,構成執行死循環.end @ 代表整個彙編文件的結束$: arm-cortex_a9-linux-gnueabi-as test.s -o test.o // 編譯彙編代碼$: arm-cortex_a9-linux-gnueabi-objdump -S test.o > 1.
  • ARM單片機的復位電路設計
    工作電壓導致其噪聲容限低,這是對數字電路極限的挑戰,對電源的紋波,瞬態響應性能,時鐘源的穩定度,電源監控可靠性等諸多方面也提出了更高的要求.ARM 監控技術是複雜並且非常重要的分立元件實現的監控電路,受溫度,溼度,壓力等外界的影響大而且對不同元件影響,不一致較大板面積,過多過長的引腳容易引入射頻幹擾,功耗大也是很多應用難以接受.而集成電路能很好的解決此類問題.目前也有不少微處理器中集成監控電路
  • 從體系結構的演變看高性能微處理器的發展趨勢
    微處理器體系結構隨著高性能計算的需求,計算機體系結構發生了很大變化。圖1 ZSP400 內核超標量體系結構框圖眾所周知,超標量處理器是通用微處理器的主流體系結構,幾乎所有商用通用微處理器都採用超標量體系結構。而在DSP方面,LSI 邏輯公司的 ZSP200、 ZSP400、ZSP500和ZSP600均採用超標量體系結構。
  • 新型CPU及微處理器低壓大電流可編程輸出電源設計
    O 引言本文引用地址:http://www.eepw.com.cn/article/82282.htm  隨著現代電子產品,特別是可攜式電子產品在噪聲、幹擾及功耗方面的要求不斷提高,許多新型微處理器、CPU、MCU和DSP等系統核心器件的供電電壓要求越來越低,但為了能夠處理更多的接口和外設數據。其電流要求則相對增大。