曾经的UCOSii
我只是來分享自己的UCOS學(xué)習(xí)資料的,,順便叨叨,自己是看著任哲的書一點(diǎn)一點(diǎn)學(xué)的,,,
自己大四的時(shí)候?qū)W的UCOSii,,但是好像學(xué)了之后,就只有一次真正使用過它,,在使用網(wǎng)絡(luò)模塊ENC28J60的時(shí)候.....
對(duì)于當(dāng)時(shí)自己還沒學(xué)的時(shí)候,一直很納悶什么是操作系統(tǒng)哈,,是什么原因讓人們?nèi)ゾ帉懖僮飨到y(tǒng)程序,,到底是為了解決什么問題,而寫的操作系統(tǒng)
其實(shí)最貼近人的例子就是自己的電腦啦,,,和自己的沒有操作系統(tǒng)的單片機(jī)程序(俗稱"裸機(jī)")做比較
自己的電腦能一邊看視頻,一邊聽歌,一邊打字,一邊聊天,一邊下東西...........感覺是不是同時(shí)進(jìn)行
而沒有操作系統(tǒng)的單片機(jī)程序,就是平時(shí)寫的程序,,,,算啦,,舉個(gè)例子
假設(shè)哈,,我需要寫一個(gè)處理許多事情的程序
如果在沒有操作系統(tǒng)的單片機(jī)上做,,也可以做,,,不過呢!有個(gè)麻煩的地方就是,,為了使各個(gè)功能都能及時(shí)(假設(shè)響應(yīng)速度為1us)的響應(yīng)
我們做程序的時(shí)候就要想法,把有延時(shí)的地方不能真的延時(shí),要能立即執(zhí)行下面的功能,,,,,,,,,,,就在想有沒有更好地方式來實(shí)現(xiàn)呢
對(duì)了單片機(jī)里面的程序主要是根據(jù)寄存器的各項(xiàng)執(zhí)行 ,,,,,就在想要是這樣就好了
?
?
?
?
?
要是有個(gè)程序哈,,我只要把我想要的各個(gè)功能寫好,并且寫成一個(gè)函數(shù)一個(gè)函數(shù)的,然后呢這個(gè)程序有個(gè)功能,我只要把我寫的每個(gè)函數(shù)的函數(shù)地址傳給它,,然后就不用我管了
然后整個(gè)程序就像上面那樣執(zhí)行多好啊
所以操作系統(tǒng)就來拯救我了
先上菜
#include "includes.h"unsigned char task1_STK[60];//任務(wù)1堆棧的初始化 unsigned char task2_STK[60];//任務(wù)2堆棧的初始化void task1(void *date) reentrant; void task2(void *date) reentrant;void main(void) {InitTimer0();InitSerial();InitSerialBuffer();OSInit();OSTaskCreate(task1, (void *)0, &task1_STK[0], 8);OSTaskCreate(task2, (void *)0, &task2_STK[0], 9);OSStart();}void task1(void *date) reentrant {date = date;while(1){PrintStr("A\r"); // OSTimeDly(10);//延時(shí)以時(shí)鐘節(jié)拍算OSTimeDlyHMSM(0, 0, 1, 0); //等待1秒 延時(shí)按時(shí)分秒毫秒算 } }void task2(void *date) reentrant {date = date;while(1){PrintStr("Y\r");OSTimeDlyHMSM(0, 0, 1, 0); //等待1秒 } }?
?
?
OSTaskCreate(task1, (void *)0, &task1_STK[0], 8);這句就是創(chuàng)建一個(gè)任務(wù)的函數(shù),,,就是把咱寫的
?
這兩個(gè)函數(shù)哈,,利用UCOS提供的OSTaskCreate()函數(shù),使咱這兩個(gè)函數(shù)實(shí)現(xiàn)一開始想的那樣執(zhí)行
看一下這個(gè)函數(shù)
?
?
這個(gè)數(shù)組哈有個(gè)新名字
?那個(gè)數(shù)組里面就是這樣子
?
多個(gè)任務(wù)就是這樣子,,,,
?對(duì)于裁剪.............這個(gè)您學(xué)了就知道了.........感覺名字挺高大上,,可能對(duì)于小系統(tǒng)而言吧比較簡單點(diǎn)
?
我把自己學(xué)習(xí)的歷程給大家,,,我的歷程里面一般都很簡簡單單不過我當(dāng)時(shí)是
關(guān)于Proteus ?與 Keil 聯(lián)調(diào) ?,,就是能夠一步一步的執(zhí)行,看程序運(yùn)行,,
把proteus安裝目錄下 VDM51.dll(搜一下吧)文件復(fù)制到Keil安裝目錄的 \C51\BIN 目錄中。
如果沒有自己在網(wǎng)上下一個(gè),,或者我下面有百度云分享,里面有
?
?
修改keil安裝目錄下 Tools.ini文件,在C51字段加入TDRV9=BIN\VDM51.DLL ("Proteus VSM Monitor-51 Driver"),保存 注意:不一定要用TDRV9,根據(jù)原來字段選用一個(gè)不重復(fù)的數(shù)值就可以了。引號(hào)內(nèi)的名字隨意
?
進(jìn)入KEIL的project菜單option for target '工程名'。在DEBUG選項(xiàng)中右欄上部的下拉菜選中 Proteus VSM Monitor-51 Driver。 在進(jìn)入seting,如果同一臺(tái)機(jī)IP 名為127.0.0.1,如不是同一臺(tái)機(jī)則填另一 臺(tái)的IP地址。端口號(hào)一定為8000 注意:可以在一臺(tái)機(jī)器上運(yùn)行keil,另一臺(tái)中運(yùn)行proteus進(jìn)行遠(yuǎn)程仿真
?
?
?
?
?
?
?下面是自己當(dāng)年學(xué)的點(diǎn)點(diǎn)滴滴,,會(huì)發(fā)現(xiàn)缺一個(gè) ?內(nèi)存分配,,,,,,這是因?yàn)閷W(xué)到消息隊(duì)列的時(shí)候,自己為畢業(yè)證的事情分心了,然后堅(jiān)持了一個(gè)星期想考研.........最后
還是被興趣給打敗了................對(duì)于內(nèi)存分配,我看了老衲五木,關(guān)于網(wǎng)絡(luò)Lwip的源碼時(shí)介紹的挺好的,,親們可以百度一下,,這個(gè)人寫文章也挺有意思的,,,也是開頭先 扯一點(diǎn)別的
?
?鏈接:http://pan.baidu.com/s/1boUHKQF 密碼:jpjy
?
總結(jié)
- 上一篇: tableView的用法具体解释
- 下一篇: 交换机的简介及数据通信过程,子网掩码及路