
stm32 ucos理解
文章平均质量分 92
nanjoh
这个作者很懒,什么都没留下…
展开
-
ucos通信邮箱的理解
学习过信号量之后再来看邮箱,发现他们是非常相似的,甚至有时候邮箱可以当做信号量来使用,邮箱相对信号量而言,只是多传递一个指针变量和信号量相似,ucos提供了5个对邮箱操作的函数它们是:1.建立一个邮箱,OSMboxCreate()2.等待一个邮箱的消息 OSMboxPend()3.发送一个消息到邮箱,OSMboxPost()4.无等待从邮箱中得到一个消息,OSMboxAcce原创 2017-01-05 15:44:46 · 8659 阅读 · 0 评论 -
ucos 改变任务的优先级
在Ucos里,任务优先级是可以改变的,可以修改任务优先级的一个好处就是可以解决优先级反转问题,什么是优先级反转问题,即当一个高优先级任务通过信函量计征访问共享资源是,该信号量被一低优先级任务占用,而这个低优先级任务在访问共享资源是可能又被其它一些中等优先级抢先,因此造成高优先级任务被许多具有较低优先级任务阻塞,实时性难以得到保证。在访问共享资源时,恰当地修改任务的优先级就可以解决优先级原创 2017-01-11 09:31:52 · 3132 阅读 · 0 评论 -
ucos 删除任务
有了前面的经历之后,在ucosii里,创建一个任务之后,可以对任务执行以下几种操作1.删除任务 OSTaskDel()2.挂起任务 OSTaskSuspend()3.恢复任务 OSTaskResume()4.改变任务的优先级OSTaskChangePrio()5.提取任务信息OSTaskQuery()今天我们学习一下删除任务,删除任务是说任务将返回并处以休眠状态,任务的原创 2017-01-10 17:03:08 · 1167 阅读 · 1 评论 -
ucos恢复任务
一个任务被挂起之后,想要再次被执行,是需要恢复,恢复任务需调用OSTaskResume()函数实现,想OSTaskSuspend()一样,调用OSTaskResume()需要一个参数,就是优先级,如果OSTaskResume(5)就是恢复优先级5的任务INT8U OSTaskResume(INT8U prio){ OS_TCB *ptcb; if(prio>=OS原创 2017-01-10 16:06:10 · 619 阅读 · 0 评论 -
ucos任务挂起
创建好了任务之后,就已经初步跨进了ucosii的编程了,随着进一步的编程,发现学会创建了任务还是不够的,创建任务1用于串口1发送数据,任务2用于串口1接收数据,程序本身的意图是发送完数据后,接着就串口1接收反馈回来的信息,但是不能正常通信,原因就是当任务1在发送数据过程CPU时不是会跑到任务2去接收数据,这样就会接收自己的发送的数据,在任务1执行的时候,任务2不执行,当任务1执行完,任务2原创 2017-01-10 15:41:06 · 1559 阅读 · 0 评论 -
stm32 boot0 boot1的启动方式
STM32 三种启动模式对应的存储介质君是芯片内置的,它们是: 1.用户闪存 =芯片内置的Flash 2.SRAM=芯片内置的RAM区,就是内存了。 3.系统存储器=芯片内部一块特定的区域,芯片出厂时在这个区域预置了一段bootloader,就是同事的ISP升级程序,这个 区域的内容在芯片出现后没偶人能够修改或拆除,即它是一个ROM;在每个STM32 的芯片上都有两个管脚原创 2017-01-14 16:54:16 · 24516 阅读 · 5 评论 -
ucos 任务创建
任务是什么?有一句话,CPU不同的时刻总是在执行着优先级最高的任务,所以CPU总是在不同的任务间切换,任务好比linux中近程在ucos世界里,任务就是一个大箩筐,框中一个或多个函数,CPU像个美女,总是从一个大箩筐跳到一个大箩筐,CPU这么跳来跳去都是找大帅哥我们知道,CPU总是不断在各个任务间切换,为了下次跳回来,CPU在跳的同时,要保护好现场,这时我们需要用的堆栈了,所以每当我们原创 2017-01-10 14:26:08 · 2745 阅读 · 0 评论 -
ucos全局变量
任务创建之后,只是完成系统编程的一小部分,更为重要的是任务键的通信,在ucos里任务通信可以采用以下几种方式1.共享全局变量,这是最快捷有效的方式,实现这种通信可以采用以下两种方式,一是利用宏OS_ENTER_CRITICAL和OS_EXIT_CRITICAL来关中断和打开中断,二是利用函数OSSchedLock和OSSchedUnLock对UCOS的任务调度上锁和开锁2. 使用信号量原创 2017-01-10 11:05:10 · 1266 阅读 · 0 评论 -
ucos事件控制块
信号 邮箱 消息队列都是需要先创建才能使用的,创建以上三者需要用到事件控制块这东西什么是是事件控制块呢 可以这样理解,前面学习我们已经知道,创建一个任务需要给这个任务分配一个任务控制块,这个任务控制块存储关于这个任务重要消息,那么事件控制块就好比任务里的任务控制块,它存储这个事件重要消息,我们说,创建一个事件,其本质的过程就是初始化这个事件控制块,一个任务或中断服务子程序可以通过事件控原创 2017-01-10 10:31:58 · 1188 阅读 · 0 评论 -
ucos信号量理解1
本文主要来自:http://blog.youkuaiyun.com/sinat_34550830/article/details/52911396 ucos中提供了好几个用于同步事件以及共享资源访问的机制,目前我看明白的有信号量,互斥信号量,事件标志组。下面谈谈自己对他们的理解:1.互斥信号量:互斥互斥,意思就是我用了你就不能用,你用了我就不能用。永远都只有一个人独占这个东西原创 2016-12-29 16:37:45 · 445 阅读 · 0 评论 -
ucos内存管理
为了消除碎片,ucosii连续的打开内存按分区来管理,每个分区包含有整数个大小相同的内存块类似每个人物对应一个人物块,每个时间对应一个事件块,ucosii每个内存块也是对应一个内存块,内存控制块是一个暑假结构typedef struct{ void *OSMemAddr; void *OSMemFreeList; INT32U OSMemBlkSize; I原创 2017-01-12 17:16:00 · 1250 阅读 · 0 评论 -
ucos初始化及启动
ucosii 里,在创建一个任务(或者调用其它系统服务之前),是需要先初始化系统的,初始化ucosii需要调用函数OSInit();调用函数OSInit的作用是什么,主要实现以下几个功能。1.建立空闲任务级统计任务。2.初始化ucosii变量及数据结构,其中包括信号量,邮箱,消息队列等初始化等。 多任务的启动时用户通过调用OSStart()实现的,然后,启动ucosii之前,用原创 2017-01-09 17:54:31 · 1433 阅读 · 0 评论 -
ucos时钟节拍
ucosii里 ,时钟节拍就好比是人的心脏一样重要,它对于CPU能顺利在各个任务之间切换有着至关重要的作用使用时钟源有一个特别需要注意的地方:用户必须在多任务系统启动以后再开启时钟节拍器,也就是在调用OSStart之后,ucos中时钟节拍服务是通过定时器中断服务子程序中调用OSTimeTick()实现的void OSTimeTick(void){ OS_TCB *ptcb;原创 2017-01-09 17:40:02 · 1964 阅读 · 0 评论 -
ucos 任务延时函数
在ucos里,系统也提供了这样的延时函数,一个是大众版本OSTimeDly(),一个是精致版本的OSTimeDlyHMSM(),随你怎么选择这两者的区别就是,OSTimeDly的延时时间是以节拍数来衡量的额,OSTimeDlyHMSM的延迟时间则使以具体时间大小来很亮的。这两个函数有着非常重要的作用,就是当你调用这两个函数的时候,ucos会进行一次任务调度,所以CPU能在各任务间进原创 2017-01-09 15:41:17 · 7078 阅读 · 0 评论 -
ucos任务调度
实现任务切换,需要调用函数OSSched()void OSSched(void){ INT8U y; OS_ENTER_CRITICAL(); if(OSLockNesting|OSIntNesting==0) (1) {y=OSUnMapTbl[OSRdyGrp]; OSPrio原创 2017-01-09 15:05:45 · 523 阅读 · 0 评论 -
ucos任务状态及任务控制块
一个任务被创建后,可以处于以下五种状态之一这五种状态分别是:1.睡眠状态 2.就绪状态 3.等待状态 4中断服务状态 5执行状态下面简单介绍各状态的含义即各状态的切换方法 睡眠状态:睡眠态指任务驻留在程序空间之中,还没有交给ucos管理,把任务交给ucosii是通过调用两个函数之一OSTaskCreate或OSTaskCr原创 2017-01-09 14:30:48 · 5072 阅读 · 0 评论 -
ucos 信号量的理解3
简单地说: 当信号量=0时,表示信号量代表的资源不可用,操作系统调用OSSemPend函数的任务加入该信号量的等待任务列表中, 当信号量>0时,表示信号量代表的资源可用,OSSemPend函数返回,任务可用使用资源,一般地,信号量的最大值表示资源的最大同时共享数,nmax=1;表示资源最多只能由i该任务使用,为了保证该单元不被其它任务修改,就使用nmax=1的信号量,nmax>1原创 2016-12-30 16:53:53 · 865 阅读 · 0 评论 -
ucos信号量的理解2
ucos 对信号量的支持由os_sem.c os_core.c支持,其中os_core.c提供OS_EVENT 数据结构的一些基本操作,os_sem.c则实现具体的信号量,信号量实现的分析,主要数据结构问题。1.OS_EVENT结构的实现分析typedef struct{INT8U OSEventType //事件控制块的类型INT8U OSEventGrp //等待的任务原创 2016-12-30 14:11:01 · 646 阅读 · 0 评论 -
stm32NVIC中断优先管理
这里简单介绍一下STM32的中断分组:STM32 将中断分为5个组,组为0~4,该分组的设置是由SCB->AIRCR寄存器的bit10~8,来定义的,具体分配关系表如下: 第0组 :所有4位用于指定响应优先级第1组:最高1位用于指定抢占优先级,最低3位用于指定响应优先级第2组:最高2位用于指定抢占优先级,最低两位用于指定响应优先级第3组:最高3位用于指定抢占优先级,最低1位原创 2017-01-17 14:42:32 · 1881 阅读 · 0 评论