资源简介

个人一个星期学会uc/os-II的过程,uCos-II真心不难,学它可以让你对51的认识有个质的飞跃!同样对你写程序的规范有很大很大的改进,但是因为关于这个方面实践的视频教程太少或是太抽象,所以准备录制根据51单片机学习uCos-II的全程视频教程^_^,完全可以在proteus上仿真实现,也可以在51单片机上运行,无需实验板即可学会uCosII ^_^。

资源截图

代码片段和文件信息

#include “includes.h“

/*
其实吧,系统里函数之间传递参数本来可以直接定义一个全局变量就搞定了,为什么要这么复杂呢?
这个肯定是有道理的,因为全局变量是很危险的,你每个函数都可能去改变它,而在多任务的情况下,
每个任务随时都可能被打断,那么在打断的过程中,全局变量被改变了,那不是会发生可能严重的错误了?
所以一般操作全局变量都关掉了中断以免被打断,不过有人说了,没事,这个程序是我针对某个系统特别写的
这个变量在哪里用到了我很清楚,绝对不会发生那样的事情!我想说这话的人应该就还没真正的入门了...或者已经
是真的到了某种大神级别的境界了,前者居多吧不过,废话!呵呵呵..
其实这只是个规范的问题,你如果各个程序都这么想,那么你以后想移植怎么办,你的程序要被别人去调用怎么办,
最可怕的还是后者,因为别人根本就不懂你的程序,那么如果你随便定义了一个全局变量,他也定义了,或者他在其它地方用了
,他压根就没管你的程序模块那么多..那么发生了错误,这个责任就必须归因于你了,我们的初衷本来就是让多任务使我们写程序
合作更加的方便,系统更加稳定,如果多了一颗老鼠屎,毫无疑问会搅乱一锅粥了,你愿意当那搅乱一锅粥的?加油!!^_^
*/

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文件中设置?STACK空间为40H即64。
OS_STK TaskStartStkyyb[MaxStkSize];//任务堆栈
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    //任务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    //任务2
{
INT8U err;
INT8U *perr;   
perr = &err;   //如果指针是要当作指针传递,那么请定义一个确定地址的变量,这里定义了err,否则可能自动分配的指针指向的
//地方被清零!!!而定义的临时变量因为是重载的,其实是分配了确定地址的,相当于全局变量了(查看模拟堆栈这个概念),则不会被清零

    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个文件信息

评论

共有 条评论