5024|12

1234

帖子

4

TA的资源

纯净的硅(高级)

楼主
 

对ucosii简单粗暴的快速使用 [复制链接]

      发这个贴是看的以下这个贴有感而发的。
https://bbs.eeworld.com.cn/forum. ... hlight=%C7%B3%CC%B8
     当中对时间片轮询法讲得很透彻,一个结构体加上数组将定时器中断发挥的很好,当中说到ucosii,提的很少,于是乎,我就想对使用ucosii说一些自己浅显的见解。
   ucosii说到底,只是一种操作系统,失去底层硬件框架,也发挥不出它的好处,而现在我手头上只有stm32f1系列的单片机,并且运作正常,在此就将这个工程模板发出来,工程是自己建的,ucosii的移植是在网上拷贝的别人的,为什么不自己移植?看了任哲先生的那本讲ucosii的书,就想自己对单片机操作,移植太费时间,知道是怎么个道理就行,太在意了对自己也不好,无非就是些数据类型的定义啊,临界点啊,任务堆栈啊,系统HOOK()函数啊。。。。。不想一一去费解,想必在以后做项目的时候会一一了解的,一次不要吞大了,先不求甚解,工程如下,想要的朋友可以直接用,是stm32f1系列的工程。

ucosii.part01.rar

5 MB, 下载次数: 51

ucosii.part02.rar

5 MB, 下载次数: 40

ucosii.part03.rar

3.36 MB, 下载次数: 35

此帖出自单片机论坛

最新回复

谢谢楼主分享,我感觉学习的信心增加了  详情 回复 发表于 2018-2-27 08:41

赞赏

1

查看全部赞赏

点赞 关注(1)
个人签名天地庄周马;江湖范蠡船。
个性签名还是放QQ号吧,2060347305,添加说明EEworld好友
 

回复
举报

1234

帖子

4

TA的资源

纯净的硅(高级)

沙发
 
本帖最后由 ywlzh 于 2016-1-23 18:47 编辑

说到对ucosii的简单粗暴的使用,怎么使用了,在此,还是要多嘴提一下,以前写裸机程序时,先初始化,然后无限循环,比如while(1),for(;;),这样的,一开始学习时,就说过程序不能停,这也是必须尊守的,哪怕是有一些时间的间断,也得用delay去隔开,让CPU去干耗着,而ucosii时对延时函数变成了任务调度用的了,让你延时,但是在延时这个时间段,cpu去做其他任务,任务这里提到了任务,就是无限循环,几个任务就是几个无限循环,相互之间通过两种延时函数去切换的,延时就是对CPU的释放,任务与任务之间是相互独立的,可以相互通信,相互对共同资源抢占,任务之间用任务优先级来区分,都有自己的堆栈区,这个我们可以开始不用管,反正知道cpu碰见延时函数就会跳到别的任务中去,怎么跳?哪个任务就绪,就绪中哪个任务优先级高就跳过去。这些自己上网查查就能很快了解的。

值得注意的是:每一个任务都得用延时函数来释放cpu,不要自己写延时函数,用它写好了的。要不然高任务不释放CPU,低任务无法执行!切记万万不可造成这种局面。
此帖出自单片机论坛
 
个人签名天地庄周马;江湖范蠡船。
个性签名还是放QQ号吧,2060347305,添加说明EEworld好友
 

回复

1234

帖子

4

TA的资源

纯净的硅(高级)

板凳
 
本帖最后由 ywlzh 于 2016-1-23 18:37 编辑

接下来说说任务间的通信,这个也是ucosii相对与其他操作系统的厉害的地方,据说,只是据说,有一些航天级的操作,个别部分就定制的ucosii操作系统。
1.信号量怎么用?
   涉及到几条函数,假如我要创建一个信号量sin_sing,如下:
         现在函数外定义:OS_EVENT * sinsing;        
         然后在函数中创建:sinsing=OSSemCreate(0);
这样就创建好了,需要注意的是在创建中是不能被中断打断的,怎么做呢?难道要在创建时加上OS_ENTER_CRITICAL();和OS_EXIT_CRITICAL();来划界,不用这样,直接在创建任务前去创建信号量就行,以下的互斥信号量,消息队列,都是这样的。
2信号量是用来干嘛的?
      还记得以前裸机中,标志位 是用来干嘛的,那它就是来干嘛的,只不过有点不同的是它可以计数,具体简单实现如下:
     发送信号量OSSemPost(sinsing);   
                 每发送一次,信号量sinsing就会将它里面的计数器加一,这个函数可以在中断里用,可以在任务中用。
      请求信号量 OSSemPend(sinsing,0,&err);
                 这句话是询问信号量是否为0,如果为0,就不会执行以下的程序(是因为第二参数0,意思就是如果信号量不为零,就等多久再去做接下来的程序,而第二参数为零,意思就是无限的等,管你是什么天王老子,等着!),单片机大多数对第二参数直接给0,意思很明了。err是需要自己定义一个数据,uint8_t的数据就行,它是这个函数的返回值,一般是不会在意这个err的,除非是需要返回值要用到它,不要,它就是个花瓶!信号量没求一次就会减一,如果没减完,就会释放完CPU后,再来请求的。

      

此帖出自单片机论坛
 
个人签名天地庄周马;江湖范蠡船。
个性签名还是放QQ号吧,2060347305,添加说明EEworld好友
 
 

回复

1234

帖子

4

TA的资源

纯净的硅(高级)

4
 
2.互斥型信号量
  干嘛的?
   是对资源的独占,为什么要对资源独占,各个任务共享不就行了?对,资源是共享的,但有时候也得用独占。比如说,有一个任务要用到串口发送一些数据,有另一个任务也得用串口发送数据,如果不独占,当低任务数据还没发完,而高任务抢占也要用串口发送,发送完了,低任务再接着发数据,最后数据不就乱套了吗,说一说要用到互斥型信号量。具体实现也很简单,上网一查,一大堆,值得注意的是,发送与请求是成对出现,先请求,将它变成0,在此期间,就算有高任务来抢占CPU,发现它为0,也会释放回来了,只有等资源用完了,再发送这个信号量,来告诉其他任务,我用完了,你们可以用了!
此帖出自单片机论坛
 
个人签名天地庄周马;江湖范蠡船。
个性签名还是放QQ号吧,2060347305,添加说明EEworld好友
 
 

回复

1234

帖子

4

TA的资源

纯净的硅(高级)

5
 
本帖最后由 ywlzh 于 2016-1-23 18:47 编辑

3,消息队列和消息邮箱,
    就是用来存数据的,一个是一连串的数据,一个是单个字节,也有发送和请求,,不用成对出现。
4 ,中断
   进中断是要写 OSIntEnter();用来对中断计数的,好像是这样的,反正要用就是,
   出中断是要写OSIntExit();
   中断程序的编写和裸机一样,举个例子:
   void TIM1_TRG_COM_IRQHandler(void)        //这个是TIM1的触发中断向量
{
  OSIntEnter();        
  TIM1->SR &= 0x00;           //清中断标志
  //这里写下自己要在中断里想要做的事
  OSIntExit();
}

懂了这些基本就能写了,开始自己写一个用ucosii的工程吧,还能美美的成就炫耀一把!哈哈

此帖出自单片机论坛
 
个人签名天地庄周马;江湖范蠡船。
个性签名还是放QQ号吧,2060347305,添加说明EEworld好友
 
 

回复

75

帖子

0

TA的资源

一粒金砂(中级)

6
 
楼主是个豪放派
此帖出自单片机论坛

点评

哈哈  详情 回复 发表于 2016-1-25 09:18
 
 
 

回复

1234

帖子

4

TA的资源

纯净的硅(高级)

7
 
THS3201 发表于 2016-1-24 20:45
楼主是个豪放派

哈哈
此帖出自单片机论坛
 
个人签名天地庄周马;江湖范蠡船。
个性签名还是放QQ号吧,2060347305,添加说明EEworld好友
 
 

回复

20

帖子

0

TA的资源

一粒金砂(初级)

8
 
哈哈,通俗易懂
此帖出自单片机论坛
 
 
 

回复

31

帖子

0

TA的资源

一粒金砂(初级)

9
 
此帖出自单片机论坛
 
 
 

回复

1234

帖子

4

TA的资源

纯净的硅(高级)

10
 
添加一些收集的资料,可以到时候翻翻,不需要每本都从头看到尾,遇到啥就看相应的部分,就把他当成是模块就可以了

ucosii实验指导书.doc

1.78 MB, 下载次数: 31

OS_SEM信号量源码注释.doc

91.5 KB, 下载次数: 17

四种嵌入式实时操作系统关键技术分析.PDF

235.84 KB, 下载次数: 17

一个多处理嵌入式实时操作系统的设计与实现.PDF

154.42 KB, 下载次数: 26

此帖出自单片机论坛
 
个人签名天地庄周马;江湖范蠡船。
个性签名还是放QQ号吧,2060347305,添加说明EEworld好友
 
 

回复

2

帖子

0

TA的资源

一粒金砂(初级)

11
 
简单明了 适合新手
此帖出自单片机论坛
 
 
 

回复

2

帖子

0

TA的资源

一粒金砂(初级)

12
 
LED和BUZZ函数优先级定义是不是弄反了
此帖出自单片机论坛
 
 
 

回复

4

帖子

0

TA的资源

一粒金砂(初级)

13
 
谢谢楼主分享,我感觉学习的信心增加了
此帖出自单片机论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表