找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

帖子
查看: 6951|回復(fù): 12
打印 上一主題 下一主題
收起左側(cè)

在STC8A8K64A4S12單片機(jī)芯片移植使用small RTOS 附源程序

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:505284 發(fā)表于 2020-9-2 20:22 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
   大好的一個(gè)暑假又過去,接觸51單片機(jī)也有兩年多了,從單初的入門到熟悉,再有一個(gè)年頭就面臨就業(yè)問題了,最后發(fā)現(xiàn)這幾年51單片機(jī)雖然經(jīng)典,但是也到了差不多該退出歷史的舞臺(tái)了,盡管8系列的芯片性能還不錯(cuò),但是較STM32系列的F3就能把它打的落花流水,當(dāng)然這里也不是貶低STC單片機(jī),只是說物盡其能嘛,什么樣的需求,選擇什么樣的芯片,但是就市場(chǎng)而言STM32無疑是占據(jù)了一定優(yōu)勢(shì)了,比如速度可以高達(dá)百兆,可以搭載諸多RTOS(UCOS/free RTOS等),還可以移植emwin等諸多GUI,使得人機(jī)交互界面更上一層樓,DMA、FMSC、DIO硬協(xié)議的集成,結(jié)合庫的開發(fā),功能強(qiáng)大的同時(shí),開發(fā)周期也更短,性價(jià)比超高。    說了這么多,也就是我也進(jìn)入那股大潮流中去了,為此還是有許多不甘心的,比如在STC單片機(jī)上的應(yīng)用還比較少,為此在轉(zhuǎn)入學(xué)習(xí)ucos之前,打算在學(xué)習(xí)了操作系統(tǒng)的基礎(chǔ)上,在讓手里的51發(fā)揮些余熱,為STM32開開路。自從編程從結(jié)構(gòu)化到攜帶操作系統(tǒng),特別是復(fù)雜的多任務(wù)處理,讓單片機(jī)的并行與并發(fā)在多個(gè)任務(wù)之間處理得淋漓盡致,用過之后就在也回不去了。于是就尋思著 在這個(gè)51單片機(jī)內(nèi)核得STC8上帶個(gè)操作系統(tǒng)跑破玩玩,于是就找到了2004年周立功公司開發(fā)的,陳明計(jì)工程師編寫的開源small RTOS研究使用一番,作為在最后謝幕的結(jié)果。他開發(fā)的這個(gè)操作系統(tǒng)還是有很多優(yōu)點(diǎn)的,不如說最直接的就是占用SRAM少,堆棧指針比比較精簡(jiǎn),支持多達(dá)255層中斷嵌套,可裁剪,用戶自定義配置豐富,支持消息隊(duì)列、信號(hào)量、郵箱等諸多功能。開始使用的時(shí)候因?yàn)橼s時(shí)間嘛,就用了它開發(fā)了一套簡(jiǎn)易的系統(tǒng),其實(shí)也不算完整的系統(tǒng),就是把外部的電路模塊集成到一塊,加了個(gè)操作系統(tǒng)整合了,后面加到NRF24L01和1.8寸TFT液晶驅(qū)動(dòng)時(shí)才發(fā)現(xiàn),喔呦,編譯出錯(cuò)了,報(bào)錯(cuò)信息是“DATA”,內(nèi)存溢出了,原來該操作系統(tǒng)僅僅支持編譯的small模式(DATA),對(duì)于XDATA和PDATA模式操作系統(tǒng)是無法引導(dǎo)的,這個(gè)就麻煩了呀,所有的變量遠(yuǎn)離data、idata,希望變量都加上xdata關(guān)鍵字,最后發(fā)現(xiàn)還是不行,這樣有些值是讀不出來的,甚至編譯器報(bào)錯(cuò),各種奇葩的bug,原本說支持最多16個(gè)任務(wù)的,現(xiàn)在就僅僅寫了7-8個(gè)就已經(jīng)無法使用了,我猜測(cè),這個(gè)也有可能是當(dāng)年它由轟動(dòng)一時(shí),到后來的無人問津的原因之一吧。還有要吐槽的是其實(shí)對(duì)于消息對(duì)列和郵箱我個(gè)人感覺都是多余的,很多東西一個(gè)全局變量就解決了,使用了消息隊(duì)列反倒占用內(nèi)存不說,變量定義的更多了,操作系統(tǒng)切換任務(wù)的堆棧寄存器都不夠用了,還有信號(hào)量,都變成使用中斷開關(guān)了,參考了它的例子,消息隊(duì)列應(yīng)用在了鍵盤發(fā)送,和一個(gè)值接收進(jìn)程,好像也沒有多大用處,裝個(gè)逼倒是還不錯(cuò)。最后只能總結(jié)得出看樣子51還是不適合搭載操作系統(tǒng)了,重要的函數(shù)重載都不可以。后來就去使用了RTX-51-tiny去了,一個(gè)頭文件搞定,對(duì)于超出127字節(jié)的small區(qū),可以改用XDATA,還可以刪除任務(wù),還不錯(cuò)。好了,最后就來看下效果吧,手都酸了,歡迎批評(píng)指正。

P00902-200511(1).jpg (2.84 MB, 下載次數(shù): 124)

1.8寸測(cè)溫度

1.8寸測(cè)溫度

P00902-200456(1).jpg (1.9 MB, 下載次數(shù): 141)

1.8寸采集光敏電阻

1.8寸采集光敏電阻

P00902-200323.jpg (3.5 MB, 下載次數(shù): 131)

0.96寸顯示圖片

0.96寸顯示圖片

P00902-200314.jpg (4.31 MB, 下載次數(shù): 127)

0.96寸顯示溫濕度

0.96寸顯示溫濕度

P00902-200308.jpg (4.53 MB, 下載次數(shù): 132)

0.96寸顯示ADC

0.96寸顯示ADC

P00902-200259.jpg (4.41 MB, 下載次數(shù): 135)

顯示界面

顯示界面

P00902-200249.jpg (4.19 MB, 下載次數(shù): 149)

0.96寸顯示時(shí)間

0.96寸顯示時(shí)間

P00902-200141.jpg (4.12 MB, 下載次數(shù): 134)

關(guān)機(jī)狀態(tài)

關(guān)機(jī)狀態(tài)

39 TFT_1.8寸全彩.rar

240.43 KB, 下載次數(shù): 69, 下載積分: 黑幣 -5

RTX-51-Tiny

37 small_RTOS.rar

282.25 KB, 下載次數(shù): 99, 下載積分: 黑幣 -5

small_RTOS

評(píng)分

參與人數(shù) 1黑幣 +100 收起 理由
admin + 100 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

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

使用道具 舉報(bào)

沙發(fā)
ID:108573 發(fā)表于 2020-9-3 08:27 | 只看該作者
結(jié)構(gòu)化變成感覺風(fēng)格很好,就是有時(shí)候結(jié)構(gòu)不知道怎么去組織
回復(fù)

使用道具 舉報(bào)

板凳
ID:505284 發(fā)表于 2020-9-3 09:12 來自觸屏版 | 只看該作者
神出沒 發(fā)表于 2020-9-3 08:27
結(jié)構(gòu)化變成感覺風(fēng)格很好,就是有時(shí)候結(jié)構(gòu)不知道怎么去組織

其實(shí),結(jié)構(gòu)化的編程是比較考驗(yàn)人的思維的,但為什么后來會(huì)發(fā)展為面向?qū)ο蠛蛿y帶操作系統(tǒng)的編程呢,簡(jiǎn)單了說,如處理一個(gè)按鍵,在結(jié)構(gòu)化中大循環(huán)while1,如果沒有開其他中斷程序,那程序的執(zhí)行就會(huì)是順序的,那么就會(huì)發(fā)生一個(gè)現(xiàn)象,按鍵有些時(shí)候不靈,特別難受,解決方法就是要么你加一個(gè)外部中斷檢測(cè)口,要么就是攜帶操作系統(tǒng),顯然后者在軟件上處理比較容易,因?yàn)椴僮飨到y(tǒng)中各任務(wù)就像是同時(shí)運(yùn)行的,優(yōu)先級(jí)高的操作系統(tǒng)可以及時(shí)響應(yīng),很多模塊程序以API方式接入,容易糾錯(cuò),方便引入和替換。結(jié)構(gòu)化的編程是低層的東西,注重思維和邏輯,通常做個(gè)東西,你會(huì)確定它的需求,從而定位功能,從功能確定大體架構(gòu),再從架構(gòu)細(xì)分出模塊,各模塊做出流程圖,最后選擇合適的方式編程實(shí)現(xiàn)。具體的解決方案可以學(xué)習(xí)軟件工程方面書籍,結(jié)合一下比賽,不如電賽題目等,動(dòng)手實(shí)踐一波,相信你的結(jié)構(gòu)就會(huì)組織起來了,加油!純屬個(gè)人見解,各位大佬,高手不喜勿噴哦,歡迎批評(píng)指正。
回復(fù)

使用道具 舉報(bào)

地板
ID:691028 發(fā)表于 2020-9-3 09:33 | 只看該作者
當(dāng)時(shí)為了這個(gè)RTOS還專門買了他們出的書,到后來也沒有研究明白任務(wù)是如何切換的。
回復(fù)

使用道具 舉報(bào)

5#
ID:89217 發(fā)表于 2020-9-3 10:30 | 只看該作者
TFT沒怎么玩過  受教了
回復(fù)

使用道具 舉報(bào)

6#
ID:342197 發(fā)表于 2020-10-14 10:13 | 只看該作者
大神,請(qǐng)問一下:STC8A8K單片機(jī) 同時(shí)使用串口1 和 串口2 怎樣避免沖突,謝謝
回復(fù)

使用道具 舉報(bào)

7#
ID:505284 發(fā)表于 2020-12-14 21:52 | 只看該作者
遠(yuǎn)征之路 發(fā)表于 2020-10-14 10:13
大神,請(qǐng)問一下:STC8A8K單片機(jī) 同時(shí)使用串口1 和 串口2 怎樣避免沖突,謝謝

可以考慮從串口優(yōu)先級(jí)入手啊,保障串口1或者串口2中其中一個(gè)優(yōu)先級(jí)最高,那么問題來了,不知道你說的同時(shí)工作是 一發(fā)一收,兩發(fā)、還是兩收、同收發(fā)的情況呢?如果是同時(shí)接受、同時(shí)發(fā)送的話,可以考慮優(yōu)先級(jí)調(diào)度,進(jìn)高優(yōu)先級(jí)中斷時(shí)屏蔽低優(yōu)先級(jí)的,低優(yōu)先級(jí)中斷時(shí)不是必要不必屏蔽高的;如果是是一發(fā)一收,可以考慮,一個(gè)正常,另一個(gè)用第三方定時(shí)器觸發(fā),這個(gè)是正點(diǎn)原子解決多串口并發(fā)工作的極好的解決方式哦。
回復(fù)

使用道具 舉報(bào)

8#
ID:254226 發(fā)表于 2021-12-22 10:02 | 只看該作者
51內(nèi)核的MCU從傳統(tǒng)編程,到基于OS的編程,跨度很大!
回復(fù)

使用道具 舉報(bào)

9#
ID:476652 發(fā)表于 2022-1-1 22:25 | 只看該作者
大神,有開發(fā)板資料也建議分享出來,畢竟大家玩的人多了,各種移植也就多了,
回復(fù)

使用道具 舉報(bào)

10#
ID:505284 發(fā)表于 2022-1-12 12:17 | 只看該作者
xylove51 發(fā)表于 2021-12-22 10:02
51內(nèi)核的MCU從傳統(tǒng)編程,到基于OS的編程,跨度很大!

從編譯角度來說,51編譯器底層采用的地址策略是分時(shí)復(fù)用的,最大的問題就是編寫的函數(shù)很多是不可重入的,然而你如果使用OS的話,需要的就是可重入的;另外一個(gè)方面是51單片機(jī)寄存器組是R0-R7,分為0-3個(gè)bank,對(duì)于上下文切換不太友好。
回復(fù)

使用道具 舉報(bào)

11#
ID:87000 發(fā)表于 2023-2-17 10:52 | 只看該作者
對(duì)學(xué)習(xí)點(diǎn)屏還是有很大的幫助的
回復(fù)

使用道具 舉報(bào)

12#
ID:87000 發(fā)表于 2023-2-17 16:50 | 只看該作者
small_RTOS 用了單片機(jī)掉電休眠,而 RTX-51-Tiny 里面去掉了,是不是RTX-51-Tiny不支持休眠功能吧?
回復(fù)

使用道具 舉報(bào)

13#
ID:216265 發(fā)表于 2023-4-25 15:41 | 只看該作者
牛在飛 發(fā)表于 2020-9-3 09:12
其實(shí),結(jié)構(gòu)化的編程是比較考驗(yàn)人的思維的,但為什么后來會(huì)發(fā)展為面向?qū)ο蠛蛿y帶操作系統(tǒng)的編程呢,簡(jiǎn)單了 ...

非常熱心的人,技術(shù)還很高,又很謙虛,做朋友吧
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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