找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 21393|回復(fù): 4
打印 上一主題 下一主題
收起左側(cè)

為你的51單片機(jī)移植上實時操作系統(tǒng)RTOS吧(蹄牛操作系統(tǒng))

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:287456 發(fā)表于 2018-3-4 15:44 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
蹄牛操作系統(tǒng) TINIUX在 MCS‐51單片機(jī)上的移植開發(fā)
——使用STC8A8K64S4A12芯片

1. 概述

蹄牛操作系統(tǒng) TINIUX 是一個源代碼開放的、易于移植的、面向嵌入式應(yīng)用的實時操作系統(tǒng) (RTOS),具有輕量級、低功耗、啟動快、可裁剪、可分散加載等優(yōu)點。主要應(yīng)用領(lǐng)域為工業(yè) 控制,智能傳感器開發(fā),智能終端,物聯(lián)網(wǎng),機(jī)器人等。

TINIUX 遵循 MIT 開源許可協(xié)議,可以免費在商業(yè)產(chǎn)品中使用,不需要公布應(yīng)用源碼,沒有 任何潛在商業(yè)風(fēng)險。

目前在 Github 上已開源的 TINIUX 源碼已適配好 MCS‐51 系列下的 8051 與 8052 芯片架構(gòu), 官方網(wǎng)站上wwwtiniuxorg提供了不同芯片類型在 Code::Blocks 等平臺上的示例工 程,如果您使用的芯片(開發(fā)板)未在其中,可以參照本文檔從零開始創(chuàng)建自己的開發(fā)工程, 并驗證移植的結(jié)果。

2 環(huán)境準(zhǔn)備
基于 TINIUX 開發(fā)前,我們首先需要準(zhǔn)備好單板運行的環(huán)境,包括軟件環(huán)境和硬件環(huán)境。 硬件環(huán)境:

所需硬件
描述
開發(fā)板
基于 MCS‐51 系列下的 8051 或 8052 芯片架構(gòu)的開發(fā)板。
PC機(jī)
用于編譯、加載并調(diào)試鏡像。
電源
開發(fā)板供電。



軟件環(huán)境:

軟件
描述
Window 7操作系統(tǒng)
安裝 Code::Blocks,SDCC 和相關(guān)調(diào)試驅(qū)動的操作系統(tǒng)。
Code::Blocks(17.12
以上版本)
C/C++語言的軟件集成開發(fā)環(huán)境,便于軟件工程化開發(fā)與管理。
SDCC(3.6以上版本)
用于編譯、鏈接并生成目標(biāo)芯片上的可執(zhí)行文件。



說明

Code::Blocks是一個開放源碼的全功能的跨平臺 C/C++集成開發(fā)環(huán)境。 Code::Blocks 是開放 源碼軟件,由純粹的 C++語言開發(fā)完成,它使用了著名的圖形界面庫 wxWidgets 版。 下載網(wǎng)址:http://www.codeblocks.org/downloads
一般使用選擇 binary release 版本即可,推薦下載 codeblocks‐17.12mingw‐setup.exe 安裝包。


SDCC(Small Device C Compiler)是一個優(yōu)化的 ANSI ‐ C 交叉編譯器,目標(biāo) CPU 為基于 Intel 8051, Maxim 80DS390, Zilog Z80 和Motorola 68HC08 的單片機(jī)。 下載網(wǎng)址:http://sdcc.sourceforge.net/snap.php
用戶可以根據(jù)自己的 PC 操作系統(tǒng)決定下載的版本,我們此次試驗使用的版本為 Supported
Windows ‐ x86 Binaries 安裝版。


3 獲取 TINIUX源碼


首先下載 TINIUX 開發(fā)包,步驟如下:



‐ 點擊“clone or download”按鈕,下載最新版源代碼,或者通過點擊“releases”標(biāo)簽,下 載官方給出的穩(wěn)定版本。

代碼樹中各個目錄存放的相關(guān)內(nèi)容如下所示


‐ Doc: 此目錄存放的是蹄牛操作系統(tǒng) TINIUX 的簡明教程和 API 使用說明等文檔。
‐ Kernel:此目錄存放的是與平臺無關(guān)的內(nèi)核代碼,包含核心提供給外部調(diào)用的接口的頭文 件以及內(nèi)核中進(jìn)程調(diào)度、進(jìn)程通信、內(nèi)存管理等等功能的核心代碼。用戶一般不需要修改此 目錄下的相關(guān)內(nèi)容。
‐ CPU:此目錄以及以下目錄存放的是與體系架構(gòu)緊密相關(guān)的適配 TINIUX 的代碼。比如目前 我們適配了mcs51/8051,mcs51/8052 等系列對應(yīng)的初始化內(nèi)容。用戶只需要根據(jù)所使用的 芯片類型及開發(fā)平臺選擇對應(yīng)的代碼文件即可。
‐ Preset:此目錄存放蹄牛操作系統(tǒng) TINIUX 的預(yù)設(shè)參數(shù)示例,用戶可根據(jù)芯片類型進(jìn)行調(diào)整 修改。

獲取 TINIUX 源代碼之后,我們就可以開始創(chuàng)建自己的 project 開發(fā)工程了。



4 創(chuàng)建 TINIUX工程


4.1 創(chuàng)建工程


在安裝好 Code::Blocks 等開發(fā)工具后,我們使用 Code::Blocks 集成開發(fā)環(huán)境創(chuàng)建 TINIUX 工程, 步驟如下:

‐ 打開 Code::Blocks, 然后點擊 file‐>new‐>project...創(chuàng)建一個新的工程




‐ 彈出窗口為用戶提供了各類工程開發(fā)模板,此處我們選擇 MCS51 Project 模板,如下圖所 示。



‐ 點擊 go 后,出現(xiàn)工程設(shè)置對話框,此處我們輸入工程名稱為 TiniuxDemo,并選擇工程的
文件路徑,如下圖所示。



‐ 點擊 next 后,對編譯工具進(jìn)行選擇,在 Compiler 選項我們選擇 Small Device C Compiler,
其它項采用默認(rèn)設(shè)置即可。如下圖所示。



‐ 點擊 next 后,對芯片內(nèi)存大小進(jìn)行配置,此處需要參照對應(yīng)的芯片手冊。由于要使用實
時操作系統(tǒng) TINIUX,占用的 memory 空間稍大,在 memory model 項,我們采用 large 模式。 在輸出模式項,選擇 CreateIntel hex file,讓工程編譯后生成可以直接燒寫到芯片中的文件。 如下圖所示。



‐ 點擊 finish 之后,一個空的工程即建立完成,新創(chuàng)建完畢的空軟件工程如下所示。



完成上面的配置之后,可以將內(nèi)核源代碼添加到工程中。


4.2 添加 kernel代碼到工程

‐ 將從 Github 下載的 TINIUX 軟件包(最新版軟件包 TINIUX‐master.zip 或官方穩(wěn)定版軟件包 TINIUX‐ReleaseV2.0.0.zip)解壓,把解壓后的文件夾更名為 TINIUX,并復(fù)制到工程所在的文 件夾,如本例程的 TiniuxDemo 文件夾下。

‐ 在工程樹目錄中,點擊右鍵,在彈出菜單中點擊 Add files recursively … 為工程添加 TINIUX
系統(tǒng)文件。



‐ 在彈出的對話框中選擇對應(yīng)的芯片文件,如本例程中的 TINIUX/CPU/MCS51/SDCC/8051, 如下圖所示:



‐ 點擊按鈕“確定”后,彈出對話框,則直接點擊“OK”即把 8051 文件夾下對應(yīng)的文件加
載到工程中。


‐ 采用同樣的方式加載 TINIUX/Kernel 下對應(yīng)的文件,加載 TINIUX/Preset/MCS51/8051 下對應(yīng) 的文件。添加完畢后,工程目錄中包含文件如下圖所示:



‐ 對應(yīng)的頭文件如下圖所示:




4.3 配置工程屬性

‐ 把蹄牛操作系統(tǒng) TINIUX  中對應(yīng)的文件加載到工程后,需要為工程(編譯器)指定文件所 在的目錄,以便編譯時能找到對應(yīng)的頭文件。通過菜單 Project‐>Build options…進(jìn)行設(shè)置。如 下圖所示:



‐ 在彈出對話框中,選擇 Search directories 對應(yīng)的 tab 頁面,通過“Add”按鈕添加相關(guān)文件
所在的路徑。



需要添加的文件路徑包括: TINIUX\CPU\MCS51\SDCC\8051; TINIUX\Kernel; TINIUX\Preset\MCS51\8051;

..\TiniuxDemo;


‐ 添加過程中提示是否使用相對路徑,點擊“是”即可。添加完畢之后,所加的路徑如下圖 所示:



添加完畢之后,點擊按鈕“OK”即可;
‐ 根據(jù)芯片類型,調(diào)整默認(rèn)包含的頭文件 需要調(diào)整的頭文件有兩處,一處為 OSPreset.h 文件,一處為main.c 文件;
在 OSPreset.h 文件中,
把#include <mcs51/8052.h>調(diào)整為#include "stc8.h"
在 main.c 文件中,
把#include <mcs51/8051.h>調(diào)整為#include "stc8.h"


注:頭文件 stc8.h 為 SDCC 編譯平臺下對應(yīng)的頭文件,在示例工程中會附帶此文件,用戶可 以參考使用。



4.4 驗證移植后的工程



‐ 配置完工程后,即可通過菜單 Build‐>Build 進(jìn)行編譯,或者通過 Ctrl‐F9 快捷鍵進(jìn)行編譯, 如下圖所示:



編譯完成后,若提示無錯誤,同時在文件夾 TiniuxDemo/bin/Debug 生產(chǎn)“TiniuxDemo.omf”
與“TiniuxDemo.hex”文件,則移植蹄牛操作系統(tǒng) TINIUX 成功,此時產(chǎn)生的“TiniuxDemo.hex” 則可以通過相關(guān)工具直接燒寫進(jìn)目標(biāo)芯片中使用。

若編譯失敗,則需按照編譯器的提示信息進(jìn)行對應(yīng)的調(diào)整。



5 使用 TINIUX開發(fā)


TINIUX 中提供的功能包括如下內(nèi)容: 任務(wù)創(chuàng)建與刪除、任務(wù)同步(信號量、互斥鎖)、動態(tài) 中斷注冊機(jī)制等等內(nèi)容,更詳細(xì)的內(nèi)容可以參考“蹄牛操作系統(tǒng) TINIUX 簡明教程”中描述 的相關(guān)內(nèi)容。下面章節(jié)將對任務(wù)和中斷進(jìn)行說明。



5.1 創(chuàng)建任務(wù)


‐ 用戶使用 OSTaskCreate(...)等接口函數(shù)來進(jìn)行任務(wù)的創(chuàng)建。具體可以參考《蹄牛操作系統(tǒng)
TINIUX 簡明教程》中的使用方法來創(chuàng)建管理任務(wù)。


5.2 系統(tǒng) tick中斷配置修改

芯片運行時鐘頻率(主頻)也是通過預(yù)置文件“OSPreset.h ”來配置的,其宏定義為
SETOS_CPU_CLOCK_HZ,在示例工程中,C8051F120 支持倍頻功能,我們使用倍頻之后的運
行頻率,即 98MHz,同時定時器使用 CPU 運行頻率的 12 分頻,即 8MHz;


TINIUX 操作系統(tǒng) ticks 運行頻率通過預(yù)置文件“OSPreset.h”中的宏定義 SETOS_TICK_RATE_HZ 來配置。在系統(tǒng)啟動時,通過 FitCPU.c 文件中的 FitSetupTimerInterrupt()函數(shù),配置芯片指 定的寄存器,使系統(tǒng)時鐘(中斷)參數(shù)生效;


注:在官方示例中,我們通常配置 ticks 頻率為 1000Hz,這個 ticks 頻率主要便于對系統(tǒng)的性 能測試;對于運行主頻不高的 MCS‐51 單片機(jī)系列,適當(dāng)降低 TINIUX 系統(tǒng) ticks 頻率,運行 效率會更高。

5.3 TINIUX資源配置


‐對于嵌入式系統(tǒng)來說,內(nèi)存都是比較寶貴的資源,因此一般的程序都會嚴(yán)格管理內(nèi)存使用, TINIUX 也一樣,需要使用多大的內(nèi)存,可以根據(jù)實際的 task 數(shù)量、信號量、互斥鎖、timer、 消息隊列、鏈表等內(nèi)容的數(shù)量來決定的(根據(jù)各自的結(jié)構(gòu)體大小以及數(shù)量計算),總的內(nèi)存 池的大小由系統(tǒng)宏定義 OSTOTAL_HEAP_SIZE 來確定。


‐TINIUX 中的內(nèi)存使用可以通過參數(shù)預(yù)置文件“OSPreset.h”進(jìn)行配置。在系統(tǒng)預(yù)置文件中使 用宏定義SETOS_TOTAL_HEAP_SIZE 來確定內(nèi)存池的大小,并以此來管理任務(wù)、信號量、消息 隊列等等資源的創(chuàng)建。


‐對于 MCS‐51 單片機(jī),運行效率高的 RAM 空間一般在 256 字節(jié),擴(kuò)展的 XRAM 空間會稍大, TINIUX 系統(tǒng)在啟動時,處于掛起及休眠狀態(tài)的任務(wù)或分配到 XRAM 空間,只有當(dāng)前運行的任 務(wù)會分配到 RAM 空間。同時為了減少對 XRAM 空間的占用,推薦裁剪掉信號量、互斥鎖、 timer、消息隊列等功能模塊,只啟用系統(tǒng)內(nèi)輕量級的同步信號與同步消息功能。

6 移植其他內(nèi)核的芯片


‐ 目前 TINIUX 官方已經(jīng)支持 MCS‐51/8051 8052 等系列的芯片,用戶若需移植 TINIUX 到其他 內(nèi)核的芯片時,需要在 CPU下添加一個芯片所屬系列的目錄,并且在該新增加的目錄下添 加 FitType.h、FitCPU.h、FitCPU.c 等文件,或根據(jù)開發(fā)平臺(SDCC,keil,IAR 等)的要求, 添加相應(yīng)的匯編文件。FitType.h 文件主要根據(jù)平臺的特點定義 TINIUX 系統(tǒng)的數(shù)據(jù)類型, FitCPU.c 文件主要定義系統(tǒng) ticks 中斷,SVC 中斷,中斷鎖定,task 調(diào)度及調(diào)度時寄存器的保 存與恢復(fù)等。


‐ 目前 TINIUX 官方適配了 MCS‐51/8051 8052 等系列的芯片移植文件,其中 8051 系列的移植 文件使用了傳統(tǒng) 51 定時器Timer0 的模式 1,具有 16 位寬,但無法自動重載,系統(tǒng)會自動 根據(jù) ticks 頻率設(shè)置 timer0 重載起點。此種定時器模式的優(yōu)點是適用于大多數(shù) 51/52 等系列 的單片機(jī),但是會導(dǎo)致系統(tǒng)時間漂移。目前很多芯片生產(chǎn)廠商都優(yōu)化了 Timer0 的功能,若 具有 16 位寬并且具有自動重載的模式,建議用戶配置使用,或者使用其他 Timer 定時器。

‐ 目前 TINIUX 官方提供的 8052 芯片移植文件使用了 52 單片機(jī)中標(biāo)準(zhǔn)的 Timer2 定時器,具有 16 位寬,并且具備自動重載功能,這樣系統(tǒng) ticks 精度會更高;只是在配置 Timer2 時使用了 C8051 等芯片特有的寄存器“SFRPAGE”,若用戶使用的平臺具有 52 單片機(jī)標(biāo)準(zhǔn)的 Timer2定時器,卻沒有“SFRPAGE”寄存器,則可以直接注釋掉對該寄存器的配置再使用。



7 其他說明

‐ 對于 RAM 較小的芯片,請參照參數(shù)預(yù)置文件“OSPreset.h”中的注釋進(jìn)行適當(dāng)調(diào)整,通過 宏定義關(guān)閉不必要的功能模塊,否則有可能會出現(xiàn)編譯失敗的問題。

‐ TINIUX 官方網(wǎng)站提供了一些已經(jīng)創(chuàng)建好了的示例工程,移植到新的開發(fā)板(芯片)時可參考 這些示例工程。

完整的pdf格式文檔51黑下載地址:
蹄牛操作系統(tǒng)TINIUX在MCS-51單片機(jī)上的移植開發(fā)_STC8.pdf (1.46 MB, 下載次數(shù): 223)


評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏11 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:20672 發(fā)表于 2018-7-24 20:02 | 只看該作者
不錯不錯~。!
回復(fù)

使用道具 舉報

板凳
ID:399691 發(fā)表于 2018-9-18 20:06 | 只看該作者
非常實用的一個操作系統(tǒng)
回復(fù)

使用道具 舉報

地板
ID:638495 發(fā)表于 2020-6-28 10:38 | 只看該作者
江洲蒲 發(fā)表于 2018-9-18 20:06
非常實用的一個操作系統(tǒng)

keil可以用不?
回復(fù)

使用道具 舉報

5#
ID:87631 發(fā)表于 2021-10-6 20:05 | 只看該作者
這個系統(tǒng)好像沒有維護(hù)了吧
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表