文章分类 - ucos
摘要:以前,草草看过邵贝贝的关于ucos ii的书,自觉的也理解了一些,刚好手上一个项目用了stm32的芯片,由于以前学过一些stm32,再加上现在网上关于stm32+ucos ii的资料也很多,所以就移植了ucos ii,移植过程就不说了,就说说现阶段对ucos ii的理解吧!由于刚使用该系统,理解有错的地方还请网友多多指正。个人觉得ucos ii比较有用的地方在于以下几个方面:1、系统提供了任务调度算法,我觉得刚入门的工程师不宜在这方面下太大功夫,看邵贝贝的书的时候,由于是理论方面的书,所以这些东西讲的很细,不过我觉得作为工程人员,首要的目的是应用,所以这些东西留在以后深入研究吧!2、系统采用.
阅读全文
摘要:contex-M3,我的USB host主机接口的控制卡终于研发成功了。运行有ucos 系统,从裸机到ucos这个过程其实不是很难,关键是得硬着头皮往上顶。当你走过去,成功了,你会看着你的劳动成果感到欣慰。ucos编程,不像 linux编程格式那么严禁,好像它并不是一个真正的操作系统,我以前裸机怎么编程的,我现在依旧怎么编,只是在增加任务的时候,按照ucso的规定,还 有就是中断函数编写了,格式上进入中断前加一个OSIntEnter();,出中断前加一个OSIntExit();,以便告诉ucos,程序发生中断 了。 我感觉。从裸机到ucos最大的不同就是,编程思想的不一样,你要有多任务的思想,
阅读全文
摘要:auxGetDevCaps API 获取附属设备容量 auxGetNumDevs API 返回附属设备数量 auxGetVolume API 获取当前卷设置 auxOutMessage API 向输出设备发送消息 auxSetVolume API 设置附属设备卷 AbortDoc API 终止一项打印作业 AbortPath API 终止或取消DC中的一切路径 AbortPrinter API 删除打印机缓冲文件 AbortSystemShutdown API 停止系统工作 AccessCheck API 检验客户访问权限 AccessCheckAndAuditAlarm API 检验访问,产
阅读全文
摘要:1. API之网络函数 WNetAddConnection 创建同一个网络资源的永久性连接WNetAddConnection2 创建同一个网络资源的连接WNetAddConnection3 创建同一个网络资源的连接WNetCancelConnection 结束一个网络连接WNetCancelConnection2 结束一个网络连接WNetCloseEnum 结束一次枚举操作WNetConnectionDialog 启动一个标准对话框,以便建立同网络资源的连接WNetDisconnectDialog 启动一个标准对话框,以便断开同网络资源的连接WNetEnumResource 枚举网络资源WNe
阅读全文
摘要:名称:51单片机驱动蜂鸣器发声 编写:付新 日期:2012/5/9 平台:Keil 4, Ly-51S学习板 内容:模拟报警声,如闹钟 滴 滴 滴 滴 -----------------------------------------------------*/ #include<reg52.h> sbit SPK = P1^2; void delay_2us(unsigned char t) { while(--t); } void main() { while(1) { delay_2us(25); S...
阅读全文
摘要:在嵌入式应用中,使用RTOS的主要原因是为了提高系统的可靠性,其次是提高开发效率、缩短开发周期。uCOS-II是一个占先式实时多任务内核,使用对 象是嵌入式系统,对源代码适当裁减,很容易移植到8~32位不同框架的微处理器上。但uCOS-II仅是一个实时内核,它不像其他实时操作系统(如嵌入式 Linux)那样提供给用户一些API函数接口。在uCOS-II实时内核下,对外设的访问接口没有统一完善,有很多工作需要用户自己去完成。串口通信是 单片机测控系统的重要组成部分,异步串行口是一个比较简单又很具代表性的中断驱动外设。本文以单片机中的串口为例,介绍uCOS—II下编写中断服务程序 以及外设驅动程序
阅读全文
摘要:一、uCOS2中的中断处理过程。二、在一指的情况下,要注意的问题。三、在一指的情况下,代码可能的执行路径。四、贴一些网上还好的关于ucos中断处理的帖子。(提醒下,以下细节分析部分,是基于凌阳SPCE061A处理器,及移植的uCOS2.00的代码,可能有局限性。 且这里的OSEnterCritical()和OSExitCritical是采用简单的关总中断和开总中断操作来实现的。)一、uCOS2中的中断处理过程:关总中断,保护现场,清中断标志(硬件自动清除的就不用了) (1)禁止中断源使能(若中断源可能引起重复中断,必关之) (2)OSIntEnter() (3)中断服务代码(这个才是目的) (
阅读全文
摘要:摘要:本文提出了基于ucos ii的一个文件系统的设计与实现方法。通过分析文件系统中的层次结构和功能模块,给出了文件系统的详细设计方案,包括文件控制块、文件描述符和文件保护机制等。最后还阐述了文件系统为保证可靠性所采取的技术。 1 前言 从系统的角度来看,一个文件系统要实现对存放文件的存储空间的组织、分配、信息的传输,并对已存储信息进行检索和保护等;从用户来的角度看,文件系统应该 做到存取文件方便,信息存储安全可靠,既能实现共享又可做到保密。当用户要求文件系统保存一个已命的文件时,文件系统能将它们放在适当的地方。当用户要使 用文件时,文件系统可以根据文件名找出某个具体文件。 文件系统设计时,必
阅读全文
摘要:uc/os软件中断与硬件中断处理流程分析========================================================================================================软件中断===================================================================================SWI(software interrupt)软件中断,由用户定义的中断指令.可以用于用户模式下的程序调用特权操作指令.在实时操作系统中可以通过该机制实现系统调用.一个 SWI
阅读全文
摘要:事件控制块中的具体使用过程:(以信号量为例) 1。与任务控制块的管理类似,UCOS在系统初始化的时候会在OSIint() 函数中控制应用程序使用的事件总数创建一个空的事件控制块链表,并用OSEventPtr作用指针指向他。以后每当创建一个事件时,就会从该空链表中取一个事件控制块。2。创建一个信号量:在使用信号量前,程序必须调用函数OSSEMCreat()来创建一个信号量。我们一般在一个任务中创建一个信号量。调用OSSEMCreat()时,会从空事件控制块中取得一个事件控制块。在成功申请后,先对该事件控制块进行初始化,即把其类型设为信号量,并置信号量初值,事件指针设为空指针,然后调用OSEven
阅读全文
摘要:任何操作系统都要有一个周期性的时钟源,以提供系统处理延时、超时、定时中断等与时间有关的事件。用硬件定时器产生一个周期性的中断来实现系统时钟。两次中断的最小时间间隔为时钟节拍。关于中断说一下:在uCOSII中,通常都是用任务处理异步事件,而中断服务程序只是向任务发送消息等方法去激活任务。与处理时间问题有关的功能函数为OSTimeDly() , OSTimeDlyHMSM() , OSTimeDlyResume() , OSTimeGet(), OSTimeSet().任务的延时可以让任务暂停一段时间并进行一次任务的调度,以让出CPU的使用权。OSTimeDlyResume()取消任务延...
阅读全文
摘要:为了把描述事件的数据结构统一起来,ucosii使用了事件控制块ECB的数据结构来描述诸如信号量、邮箱、消息队列等事件。任务或中断服务子程序可以通过事件控制块ECB来向另外的任务发信号。用于通信的数据结构叫事件控制块。对事件控制块操作的函数有4个:(XXX为信号量,邮箱或消息队列等)事件控制块初始化函数OS_EventWaitListInit(),该函数被OSXXXCreate()调用。使一个任务进入等待状态函数OS_EventTaskWait(), 该函数被OSXXXPend()调用。使一个任务进入就绪态函数OS_EventTaskRdy(),该函数被OSXXXPost()调用。使一个等待超时
阅读全文
摘要:一。 事件控制块ECB数据结构: typedef struct { INT8U OSEventType; //事件类型 INT8U OSEventGrp; //等待任务所在的组 INT16U OSEventCnt; //当事件是信号量时的计数器 void *OSEventPtr; //指向消息或消息队列的指针 INT8U OSEventTbl[OS_EVENT_TBL_SIZE]; //等待任务列表 } OS_EVENT; 二.关键算法: 1、将一个任务插入到等待事件的任务列表中: 当调用函数OS_EventTaskWait( )使一个任务进入等待某事件发生时,需要此算法...
阅读全文
摘要:任务管理 1 OSTaskCreate() 建立一个新任务。任务的建立可以在多任务环境启动之前,也可以在正在运行的任务中建立。中断处理程序中不能建立任务。一个任务可以为无限循环的结构。函数原型:INT8U OSTaskCreate(void (*task)(void *pd), void *pdata, OS_STK *ptos, INT8U prio);参数说明:task 是指向任务代码首地址的指针。 pdata 指向一个数据结构,该结构用来在建立任务时向任务传递参数。 ptos is a pointer to the task's top of stack. If the conf
阅读全文
摘要:对于信号量,uCOS II中共提供了六个函数:OSSemCreate 、OSSemDel、OSSemPend、OSSemPost、OSSemAccept、OSSemQuery。其中我们常用的只有三个即 OSSemCreate 、OSSemPend、OSSemPost 。 信号量的结构为: typedef struct { INT8U OSEventType; INT8U OSEventGrp; INT16U OSEventCnt; void *OSEventPtr; INT8U OSEventTbl[OS_EVENT_TBL_SIZE]; } OS_EVENT; OSSemCreate的函..
阅读全文
摘要:信号量使用主要涉及三个函数: OSSemCreat(), OSSemPend(), OSSemPost(); 第一个负责建立一个信号量,同时需要的参数是设定信号量的值;第二个是等待该信号量,当信号量值为0时,将调用改函数的任务加入该信号量的等待任务列表 中,当信号量值大于0时,该函数紧紧将信号量值减1;第三个函数负责置位指定的信号量,当指定的信号量是0或者大于0时,该函数将信号量值加1然后返回。 此时在该信号量的等待任务列表中优先级最高的任务进入就绪态,任务调度函数进行任务调度。void DemoTask(void *pdata){ INT32U i; pdata = pdata;...
阅读全文
摘要:线程同步互斥的控制方法,四种进程或线程同步互斥的控制方法:1、临界区:通过对多线程的串行化来访问公共资源或一段代码,速度快,适合控制数据访问。2、互斥量:为协调共同对一个共享资源的单独访问而设计的。3、信号量:为控制一个具有有限数量用户资源而设计。4、事 件:用来通知线程有一些事件已发生,从而启动后继任务的开始。临界区(Critical Section)保 证在某一时刻只有一个线程能访问数据的简便办法。在任意时刻只允许一个线程对共享资源进行访问。如果有多个线程试图同时访问临界区,那么在有一个线程进入 后其他所有试图访问此临界区的线程将被挂起,并一直持续到进入临界区的线程离开。临界区在被释放后,
阅读全文
摘要:信号量(这里仅说互斥)就两个操作,一个请求,一个释放。一个任务请求信号量时:如果被其它任务占用,则该任务等待,同时导致任务切换;如果没有被其它任务占用,则获得,继续执行。释放信号量时,如果其它高优先级任务正在请求并等待该信号量,则导致任务切换。OSTimeDly之类,并不导致信号量的释放。只有获取信号量的那个任务调用释放功能时,信号量才会释放。信号量 信号量的使用自己看了几天仍然没搞明白信号量,邮箱,和队列的区别。现在是学习信号量的使用,苦于没有现成的例子参考,只能一步步弄清楚它的,感觉外国人的思维还是和中国的有很大的出入,以至于学习一个国外的技术,总是先翻译成自己习惯的思维去领会,变成自..
阅读全文
摘要:互斥条件:实现 任务间通信最简单的办法是使用共享数据结构,特别是党所有的任务都在一个单一地址空间下,这种处理特别简便,如果能使用变脸个(如全局变量,指针,缓冲 区,链表以及循环缓冲区等),使用共享数据结构通信就更为容易,虽然共享数据区法简化了任务间的信息交换,但是必须保证每个任务在处理共享数据时的排他 性,以避免竞争和数据的破坏,与共享资源打交道时,使之满足互斥条件最一般的方法有:关中断;使用测试并置位指令禁止做任务切换利用信号量关中断和开中断1voidFunnction(void)2{3OS_ENTER_CRITCAL();4.5.6.7.8OS_EXIT_CRITCAL();9}必须十分小
阅读全文
摘要:uC/OS-II的任务一般格式为:void TASKn(void *pdata){ pdata = pdata; while (1) { OSTimeDly(OS_TICKS_PER_SEC); }} ucos-II是基于任务优先级抢占式任务调度法的,就是内核在管理调度时,调用任务切换函数(一般为SSched()),在该函数中将此时 已处于就绪状态(条件一)并且为最高优先级(条件二)的任务的保存于其栈中的相应信息压入cpu寄存器中(软中断完成),然后cpu开始运行该任务的代 码。 内核是何时进行任务调度的呢?虽然uC/OS-II是可被剥夺资源的内核(...
阅读全文

浙公网安备 33010602011771号