UCOS-II移植ARM的读书笔记.doc_第1页
UCOS-II移植ARM的读书笔记.doc_第2页
UCOS-II移植ARM的读书笔记.doc_第3页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

UCOS-II移植ARM的读书笔记(12.15) UCOS-II移植ARM的读书笔记(12.15) 移植的工作难以分析下去,先来几个UCOS的使用范例看看吧 第一个范例:void main (void) PC_DispClrScr(DISP_FGND_WHITE + DISP_BGND_BLACK); /* PC的清屏函数,PC_DispClrScr(INT8U color),这里调用时是前景色为白色,背景色为黑色*/ OSInit(); /* Initialize uC/OS-II ,初始化UCOS-II,在使用任何功能之前必须调用OSInit函数,建立两个任务:空闲任务所有其他任务均未就绪时运行,统计任务计算CPU的利用率*/ PC_DOSSaveReturn(); /* Save environment to return to DOS 允许程序在正式开始多任务前,保存重要的寄存器的值,以保证UCOS能够正常地返回DOS */ PC_VectSet(uCOS, OSCtxSw); /* Install uC/OS-IIs context switch vector ,用于设定中断向量表的内容。*/ RandomSem = OSSemCreate(1); /* Random number semaphore,建立一个信号量,并制定信号量的初值为1,OSSemCreate(1)返回一个指向信号量的指针,那么之后对该信号量的操作全部通过这个指针来实现 */ OSTaskCreate(TaskStart, (void *)0, &TaskStartStkTASK_STK_SIZE - 1, 0); /*至少建立一个任务,TaskStart为指向该任务运行代码的指针,第二个参数是一个指向任务初始化数据的指针,第三个是任务的堆栈栈顶,当堆栈是从上到下,必须把堆栈高地址传给该函数,最后一个参数指定建立的任务的优先级,数值越小优先级越高,每个任务的优先级都是介于062之间独一无二的。*/ OSStart(); /* Start multitasking,调用该函数将控制权交给内核,开始运行多任务 */ OSStart函数会让优先级最高的就绪任务开始运行,即TaskStartvoid TaskStart (void *pdata)#if OS_CRITICAL_METHOD = 3 /* Allocate storage for CPU status register */ OS_CPU_SR cpu_sr;#endif char s100; INT16S key; pdata = pdata; /* Prevent compiler warning,这是这个参数是当任务建立时传递过来的一个指针 */ TaskStartDispInit(); /* Initialize the display 初始化屏幕显示 */ OS_ENTER_CRITICAL(); /*关中断*/ PC_VectSet(0x08, OSTickISR); /* Install uC/OS-IIs clock tick ISR */ PC_SetTickRate(OS_TICKS_PER_SEC); /* Reprogram tick rate */ OS_EXIT_CRITICAL(); /*开中断*/ OSStatInit(); /* Initialize uC/OS-IIs statistics测试所使用的处理器的速度,得知处理器在运行所有应用任务时实际的CPU使用率 */ TaskStartCreateTasks(); /* Create all the application tasks建立更多任务,10个显示不同字符的任务,在每次建立一个新任务的时候,UCOS都会判断新建立的任务是否比建立它们的任务优先级更高,如果更高,这个新建立的任务将立刻开始运行。 */ for (;) TaskStartDisp(); /* Update the display */ if (PC_GetKey(&key) = TRUE) /* See if key has been pressed */ if (key = 0x1B) /* Yes, see if its the ESCAPE key */ PC_DOSReturn(); /* Return to DOS */ OSCtxSwCtr = 0; /* Clear context switch counter 每秒都将记录任务切换次数的清零 */ OSTimeDlyHMSM(0, 0, 1, 0); /* Wait one second 将自身挂起1s,1s是通过四个参数传送的,小时,分钟,秒,毫秒 */ static void TaskStartCreateTasks (void) INT8U i; for (i = 0; i N_TASKS; i+) /* Create N_TASKS identical tasks */ TaskDatai = 0 + i; /* Each task will display its own letter */ OSTaskCreate(Task, (void *)&TaskDatai, &TaskStkiTASK_STK_SIZE - 1, i + 1); 上面的函数循环建立了十个Task任务,下面是Task任务的代码void Task (void *pdata) INT8U x; INT8U y; INT8U err; for (;) OSSemPend(RandomSem, 0, &err); /* 获取信号量*/ x = random(80); /* 获得随机数x*/ y = random(16); /*获得随机数y*/ OSSemPost(RandomSem); /* 释放信号量*/ /* Display the task number on the screen */ PC_DispChar(x, y + 5, *(char *)pdata, DISP_FGND_BLA

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论