资源简介
个人一个星期学会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个文件信息
相关资源
- 单片微型机原理应用与实验答案
- FPGA MC8051移植 100M频率计设计详细步骤
- ISO157651-4全4册高清完整版
- 烟雾报警代码
- 图解单片机功能与应用(PDF图书)
- STM32F103C8T6 单片机 ESP8266 12F接入机智云
- 微处理器 CPU 的结构与性能
- Dubbo入门Demo155110
- zw_jhn199388-9911706-基于51单片机都_自动
- 单片机Keil C251 V5.5.4
- Hi3516 SDK 中文文档.rar
- 时间触发嵌入式系统设计模式.pdf
- 瑞萨单片机RL78G13(R5F100LEA)中文资料
- 80C51单片机实验实训100例 基于Keil C和
- 1119447_General_NetSDK_Chn_Win64_IS_V3.052.000
- Cisco ASA防火墙配置手册
- 基于51单片机的1-40Mhz正弦波发生器仿
- FreeRTOS_emWin.rar
- MTK eFlashTool V2.51
- OV5116原理图
- (齿轮生成器)GearTrax_2015_23_0_151绿色
- STM32/PLC/FX2N/程序/KEIL4/5源码/单片机/仿
- 《青风带你学蓝牙》nrf51822电子书pd
- GB 35114-2017 公共安全视频监控联网信息
- c8051f040例程
- 51单片机RFID程序完整版
- Altium Designer的元件库大全包括DSPARM5
- AVR32单片机说明书
- zw_lyc980723-10514373-KaoQinMS.zip
- zw_gn2856512695-10874570-安徽大学考研计算
评论
共有 条评论