資源簡介
個人一個星期學(xué)會uc/os-II的過程,uCos-II真心不難,學(xué)它可以讓你對51的認(rèn)識有個質(zhì)的飛躍!同樣對你寫程序的規(guī)范有很大很大的改進(jìn),但是因為關(guān)于這個方面實踐的視頻教程太少或是太抽象,所以準(zhǔn)備錄制根據(jù)51單片機(jī)學(xué)習(xí)uCos-II的全程視頻教程^_^,完全可以在proteus上仿真實現(xiàn),也可以在51單片機(jī)上運(yùn)行,無需實驗板即可學(xué)會uCosII ^_^。
代碼片段和文件信息
#include?“includes.h“
/*
其實吧,系統(tǒng)里函數(shù)之間傳遞參數(shù)本來可以直接定義一個全局變量就搞定了,為什么要這么復(fù)雜呢?
這個肯定是有道理的,因為全局變量是很危險的,你每個函數(shù)都可能去改變它,而在多任務(wù)的情況下,
每個任務(wù)隨時都可能被打斷,那么在打斷的過程中,全局變量被改變了,那不是會發(fā)生可能嚴(yán)重的錯誤了?
所以一般操作全局變量都關(guān)掉了中斷以免被打斷,不過有人說了,沒事,這個程序是我針對某個系統(tǒng)特別寫的
這個變量在哪里用到了我很清楚,絕對不會發(fā)生那樣的事情!我想說這話的人應(yīng)該就還沒真正的入門了...或者已經(jīng)
是真的到了某種大神級別的境界了,前者居多吧不過,廢話!呵呵呵..
其實這只是個規(guī)范的問題,你如果各個程序都這么想,那么你以后想移植怎么辦,你的程序要被別人去調(diào)用怎么辦,
最可怕的還是后者,因為別人根本就不懂你的程序,那么如果你隨便定義了一個全局變量,他也定義了,或者他在其它地方用了
,他壓根就沒管你的程序模塊那么多..那么發(fā)生了錯誤,這個責(zé)任就必須歸因于你了,我們的初衷本來就是讓多任務(wù)使我們寫程序
合作更加的方便,系統(tǒng)更加穩(wěn)定,如果多了一顆老鼠屎,毫無疑問會攪亂一鍋粥了,你愿意當(dāng)那攪亂一鍋粥的?加油!!^_^
*/
unsigned?char?
shu[10]={0x300x310x320x330x340x350x360x370x380x39};?//0--9
unsigned?char?i=0;
OS_MEM?*MemBuf;
INT8U?MemPart[5][32];
sbit?da=P1^5;
OS_EVENT?*mySem;
OS_EVENT?*myMbox;
OS_EVENT?*myQ;
OS_EVENT?*myQMem;
void?TaskStartyya(void?*yydata)?reentrant;
void?TaskStartyyb(void?*yydata)?reentrant;
void?TaskStartyyc(void?*yydata)?reentrant;
void?TaskStartyyd(void?*yydata)?reentrant;
void?TaskStartyye(void?*yydata)?reentrant;
void?TaskQ1(void?*qdata)?reentrant;
void?TaskQ2(void?*qdata)?reentrant;
void?TaskMem1(void?*qdata)?reentrant;
void?TaskMem2(void?*qdata)?reentrant;
OS_STK?TaskStartStkyya[MaxStkSize];//注意:我在ASM文件中設(shè)置?STACK空間為40H即64。
OS_STK?TaskStartStkyyb[MaxStkSize];//任務(wù)堆棧
OS_STK?TaskStartStkyyc[MaxStkSize];
OS_STK?TaskStartStkyyd[MaxStkSize];
OS_STK?TaskStartStkyye[MaxStkSize];
OS_STK?TaskStkQ1[MaxStkSize];
OS_STK?TaskStkQ2[MaxStkSize];
OS_STK?TaskStkMem1[MaxStkSize];
OS_STK?TaskStkMem2[MaxStkSize];
void?main(void)
{
// INT8U?err;
????OSInit();
????
//??InitTimer0();
????InitSerial();
????InitSerialBuffer();
KeyInit();
????OSTaskCreate(TaskStartyya?(void?*)0?&TaskStartStkyya[0]2);
????OSTaskCreate(TaskStartyyb?(void?*)0?&TaskStartStkyyb[0]3);
????OSTaskCreate(TaskStartyyc?(void?*)0?&TaskStartStkyyc[0]4);
????OSTaskCreate(TaskStartyyd?(void?*)0?&TaskStartStkyyd[0]5);
OSTaskCreate(TaskStartyye?(void?*)0?&TaskStartStkyye[0]6);
OSTaskCreate(TaskQ1 ??(void?*)0?&TaskStkQ1[0]7);
OSTaskCreate(TaskQ2 ??(void?*)0?&TaskStkQ2[0]8);
OSTaskCreate(TaskMem1 ??(void?*)0?&TaskStkMem1[0]10);
OSTaskCreate(TaskMem2 ??(void?*)0?&TaskStkMem2[0]11);
????OSStart();
}
void?TaskStartyya(void?*yydata)?reentrant ???//任務(wù)1
{
INT8U?*err;
InitTimer0();
????yydata=yydata;
mySem?=?OSSemCreate(1);
????clrscr();
????PrintStr(“\n\t\t*******************************\n“);
????PrintStr(“\t\t*?????Hello!?The?world.???????*\n“);
????PrintStr(“\t\t*******************************\n\n\n“);
????
????for(;;){
OSSemPend(mySem1000err);
????PrintStr(“\tTASK_A?get?Sem.\n“);
????????OSTimeDly(OS_TICKS_PER_SEC*5);????//延時1mS
OSSemPost(mySem);
????}????
}
void?TaskStartyyb(void?*yydata)?reentrant ???//任務(wù)2
{
INT8U?err;
INT8U?*perr;???
perr?=?&err;???//如果指針是要當(dāng)作指針傳遞,那么請定義一個確定地址的變量,這里定義了err,否則可能自動分配的指針指向的
//地方被清零!!!而定義的臨時變量因為是重載的,其實是分配了確定地址的,相當(dāng)于全局變量了(查看模擬堆棧這個概念),則不會被清零
????yydata=yyda
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件?????????666??2012-09-27?15:59??視頻教程地址.txt
?????目錄???????????0??2012-09-27?15:18??001-一個例程\
?????目錄???????????0??2012-09-27?15:18??001-一個例程\程序\
?????文件????????1028??2012-09-15?22:50??001-一個例程\程序\INCLUDES.H
?????文件???????24269??2009-06-30?10:34??001-一個例程\程序\KEY.C
?????文件????????4751??2009-07-05?14:50??001-一個例程\程序\KEY.H
?????文件??????142660??2009-07-05?14:00??001-一個例程\程序\Last?Loaded?ucos.DBK
?????文件????????5143??2012-09-17?21:08??001-一個例程\程序\OS_CFG.H
?????文件???????39559??2012-09-19?10:53??001-一個例程\程序\OS_CORE.C
?????文件????????3160??2002-10-21?08:20??001-一個例程\程序\OS_CPU.H
?????文件????????8318??2009-06-30?08:51??001-一個例程\程序\OS_CPU_A.ASM
?????文件???????21148??2012-09-19?07:38??001-一個例程\程序\OS_CPU_A.LST
?????文件????????3163??2012-09-19?07:38??001-一個例程\程序\OS_CPU_A.OBJ
?????文件????????8387??2012-09-15?22:30??001-一個例程\程序\OS_CPU_C.C
?????文件???????12208??2012-09-19?07:38??001-一個例程\程序\OS_CPU_C.LST
?????文件???????27379??2012-09-19?07:38??001-一個例程\程序\OS_CPU_C.OBJ
?????文件???????12166??2002-09-29?16:53??001-一個例程\程序\OS_MBOX.C
?????文件???????11209??2012-09-17?16:41??001-一個例程\程序\OS_MEM.C
?????文件???????20732??2012-09-17?14:46??001-一個例程\程序\OS_Q.C
?????文件???????11341??2002-09-29?16:55??001-一個例程\程序\OS_SEM.C
?????文件???????35694??2002-09-29?16:56??001-一個例程\程序\OS_TASK.C
?????文件????????9319??2002-09-28?17:35??001-一個例程\程序\OS_TIME.C
?????文件????????5118??2009-07-02?11:28??001-一個例程\程序\STARTUP.A51
?????文件???????11774??2012-09-19?07:38??001-一個例程\程序\STARTUP.LST
?????文件?????????873??2012-09-19?07:38??001-一個例程\程序\STARTUP.OBJ
?????文件???????24438??2009-07-05?14:52??001-一個例程\程序\UCOS_II.C
?????文件???????23492??2002-09-30?08:31??001-一個例程\程序\UCOS_II.H
?????文件???????35054??2012-09-19?07:38??001-一個例程\程序\UCOS_II.LST
?????文件??????138932??2012-09-19?07:38??001-一個例程\程序\UCOS_II.OBJ
?????文件???????17522??2012-09-19?07:38??001-一個例程\程序\clock.LST
?????文件??????135536??2012-09-19?07:38??001-一個例程\程序\clock.M51
............此處省略254個文件信息
- 上一篇:詩詞介紹靜態(tài)頁面
- 下一篇:仿新浪微博.rar
評論
共有 條評論