ImageVerifierCode 换一换
格式:DOCX , 页数:61 ,大小:36.67KB ,
资源ID:23736036      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/23736036.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(UCOSII学习笔记.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

UCOSII学习笔记.docx

1、UCOSII学习笔记/ /学校:成都理工大学 / 系:应用数学系 /专业:应用数字专业。 /日期:2009年3月 /说明:本简要合成程序是uCOS-II提供的EX1_X86 / #include includes.h /* * * CONSTANTS(宏定义) * */ #define TASK_STK_SIZE 512 /* 任务堆栈尺寸512 (单位WORD) */ #define N_TASKS 10 /* 任务数量10(不包括TaskStart()任务) */ /* * * VARIABLES(变量) * */ OS_STK TaskStkN_TASKSTASK_STK_SIZE; /

2、* 10个任务的堆栈区域 */ OS_STK TaskStartStkTASK_STK_SIZE; /* 任务TaskStart()的堆栈 */ char TaskDataN_TASKS; /* 每个任务显示字符存储区域 */ OS_EVENT *RandomSem; /* 信号量 */ /* * * FUNCTION PROTOTYPES * */ void Task(void *data); /* 其余10个任务,这10个任务共用一个函数名称 */ void TaskStart(void *data); /* 起始任务(负责uCOS-II初始化,修改中断向量*/ /* 调用TaskStar

3、tCreateTasks()创建其余10个任务*/ /* 然后若检测“ESC”键,则返回MSDOS */ static void TaskStartCreateTasks(void); /* 创建其余10个任务的任务 */ static void TaskStartDispInit(void); /* 界面显示初始化 */ static void TaskStartDisp(void); /* 多任务显示子程序 */ void main (void) PC_DispClrScr(DISP_FGND_WHITE+DISP_BGND_BLACK); /* 清屏幕 */ OSInit(); /* u

4、C/OS-II初始化 */ /* 包括(1)、初始化任务就绪表 */ /* (2)、初始化任务控制块链表 */ /* (3)、初始化事件表 */ /* (4)、初始化内存管理 */ /* (5)、初始化消息队列 */ /* (6)、初始化空闲任务 */ /* (5)、初始化统计任务 */ PC_DOSSaveReturn(); /* 保存MSDOS环境 */ /* 包括(1)、保存BIOS硬件定时中断向量(0x08)*/ /* (2)、将保留中断号0x81指向硬件定时 */ /* 中断 */ PC_VectSet(uCOS, OSCtxSw); /* Install uC/OS-IIs con

5、text switch vector */ RandomSem = OSSemCreate(1); /* Random number semaphore */ OSTaskCreate(TaskStart, (void *)0, &TaskStartStkTASK_STK_SIZE - 1, 0); OSStart(); /* Start multitasking */ / /学校:成都理工大学 / 系:应用数学系 /专业:应用数字专业。 /日期:2009年3月 /说明:本简要合成程序是uCOS-II提供的EX1_X86 / #include includes.h /* * * CONSTAN

6、TS(宏定义) * */ #define TASK_STK_SIZE 512 /* 任务堆栈尺寸512 (单位WORD) */ #define N_TASKS 10 /* 任务数量10(不包括TaskStart()任务) */ /* * * VARIABLES(变量) * */ OS_STK TaskStkN_TASKSTASK_STK_SIZE; /* 10个任务的堆栈区域 */ OS_STK TaskStartStkTASK_STK_SIZE; /* 任务TaskStart()的堆栈 */ char TaskDataN_TASKS; /* 每个任务显示字符存储区域 */ OS_EVENT

7、*RandomSem; /* 信号量 */ /* * * FUNCTION PROTOTYPES * */ void Task(void *data); /* 其余10个任务,这10个任务共用一个函数名称 */ void TaskStart(void *data); /* 起始任务(负责uCOS-II初始化,修改中断向量*/ /* 调用TaskStartCreateTasks()创建其余10个任务*/ /* 然后若检测“ESC”键,则返回MSDOS */ static void TaskStartCreateTasks(void); /* 创建其余10个任务的任务 */ static void

8、 TaskStartDispInit(void); /* 界面显示初始化 */ static void TaskStartDisp(void); /* 多任务显示子程序 */ void main (void) PC_DispClrScr(DISP_FGND_WHITE+DISP_BGND_BLACK); /* 清屏幕 */ OSInit(); /* uC/OS-II初始化 */ /* 包括(1)、初始化任务就绪表 */ /* (2)、初始化任务控制块链表 */ /* (3)、初始化事件表 */ /* (4)、初始化内存管理 */ /* (5)、初始化消息队列 */ /* (6)、初始化空闲任务

9、 */ /* (5)、初始化统计任务 */ PC_DOSSaveReturn(); /* 保存MSDOS环境 */ /* 包括(1)、保存BIOS硬件定时中断向量(0x08)*/ /* (2)、将保留中断号0x81指向硬件定时 */ /* 中断 */ /- /#define uCOS 0x80 /* Interrupt vector # used for context switch*/ /宏定义uCOS的路径SOFTWAREuCOS-IIIx86LBC45OS_CPU.H(文件中) /- PC_VectSet(uCOS, OSCtxSw); /* Install uC/OS-IIs cont

10、ext switch vector */ /* 设置中断号0x80自定义中断服务程序的向量 */ /* 地址指向OSCtxSw,即指向普通任务切换子程序*/ /* 说明:任务切换包括: */ /* (1)、普通任务切换 */ /* (2)、中断任务切换 */ RandomSem = OSSemCreate(1); /* Random number semaphore */ /* 创建一个信号量,保护Borland C+产生的随机*/ /* 数。信号量的作用是防止多个任务同时访问同 */ /* 一个资源 */ OSTaskCreate(TaskStart, (void *)0, &TaskSta

11、rtStkTASK_STK_SIZE - 1, 0); /* 创建任务TaskStart */ OSStart(); /* 在就绪表中查找最高优先级的任务号 */ /* 然后调用OSStartHighRdy()执行最高 */ /* 优先级任务 */ /* * * START MULTITASKING(启动多任务操作系统) * * Description: This function is used to start the multitasking process which lets uC/OS-II manages the * task that you have created. Bef

12、ore you can call OSStart(), you MUST have called OSInit() * and you MUST have created at least one task. * 描述 : 当已经调用了OSStart(),则这个函数可以启动多任务操作系统,让uC/OS-II管理你已经创建的任务。 * 前提是你已经调用了OSInit(),并且已经至少创建了一个任务(只需要创建系统提供的空闲任务即可)。 * Arguments : none * 入口参数: 无 * Returns : none * 出口参数: 无 * Note : OSStartHighRdy()

13、 MUST: * a) Call OSTaskSwHook() then, * b) Set OSRunning to TRUE. * c) Load the context of the task pointed to by OSTCBHighRdy. * d_ Execute the task. * 注释: OSStartHighRdy()函数执行的动作是: * a) 调用Call OSTaskSwHook(),然后 * b) 设置OSRunningTRUE * c) 根据任务控制块OSTCBHighRdy,作任务切换动作。 * 实际上任务切换的实质: * (1)、从当前任务的私栈中恢复S

14、S:SP * (2)、从当前任务的私栈中恢复AX,BX,CX,DX,SI,DI,BP * (3)、执行IRET,从堆栈中弹出CS:IP * d) 自动跳转到CS:IP处,执行这个最高优先级任务 * OSStartHighRdy()函数的存储路径SOFTWAREuCOS-IIIx86LBC45OS_CPU_A.ASM * */ void OSStart (void) INT8U y; INT8U x; if (OSRunning = FALSE) /* 如果多任务操作系统还没有运行 */ y = OSUnMapTblOSRdyGrp; /* Find highest prioritys task

15、 priority number */ x = OSUnMapTblOSRdyTbly; /* 查找优先级最高的任务号 */ OSPrioHighRdy = (INT8U)(y 3) + x); /* 优先级最高的任务号(y 0) /* See if called from ISR . */ /* 如果当前正在执行中断服务程序 */ return (OS_EVENT *)0); /* . cant CREATE from an ISR */ /* 创建失败,返回(OS_EVENT *)0 */ /* 注:中断服务子程序中不能调用创建信号量 */ OS_ENTER_CRITICAL(); /*

16、关全局中断 */ pevent = OSEventFreeList; /* Get next free event control block */ /* 从空闲事件控制块链表中获得一个事件控制块 */ if (OSEventFreeList != (OS_EVENT *)0) /* See if pool of free ECB pool was empty */ /* 如果获得一个事件控制块成功 */ OSEventFreeList = (OS_EVENT *)OSEventFreeList-OSEventPtr; /* 修正空闲事件控制块链表头指针 ,使它指向 */ /* 下一个空闲控制

17、块 */ OS_EXIT_CRITICAL(); /* 开放全局中断 */ if (pevent != (OS_EVENT *)0) /* 如果获得的事件控制块可用 */ pevent-OSEventType = OS_EVENT_TYPE_SEM; /* 登记事件控制块的类型信号量 */ pevent-OSEventCnt = cnt; /* 信号量的初始值存入申请的事件控制块中 */ pevent-OSEventPtr = (void *)0; /* Unlink from ECB free list */ OS_EventWaitListInit(pevent); /* Initiali

18、ze to nobody waiting on sem. */ return (pevent); /* * * INITIALIZE A TASKS STACK * * Description: This function is called by either OSTaskCreate() or OSTaskCreateExt() to initialize the * stack frame of the task being created. This function is highly processor specific. * * Arguments : task is a poi

19、nter to the task code * * pdata is a pointer to a user supplied data area that will be passed to the task * when the task first executes. * * ptos is a pointer to the top of stack. It is assumed that ptos points to * a free entry on the task stack. If OS_STK_GROWTH is set to 1 then * ptos will contain the HIGHEST valid address of the stack. Similarly, if * OS_STK_GROWTH is set to 0, the ptos will contains the LOWEST valid address * of the stack. * (指向任务堆栈栈顶的指针,它是指向

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1