OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4227|回复: 6

求教裸机程序的全局变量在ucos里怎么处理?

[复制链接]

9

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
74
金钱
74
注册时间
2018-7-10
在线时间
17 小时
发表于 2018-7-10 15:11:41 | 显示全部楼层 |阅读模式
1金钱
我是新手,原来同事的裸机程序是在STM32F103上完成的,现在产品要做升级,用的是STM32F407+UCOS3完成老程序的升级,但是原来的程序工程量也比较大,用了大约10几个全局变量做事件通知:比如u8 gps_flag; 当GPS定位时,gps_flag置1,别的操作才会上报 等等,我想问问在UCOS3里这种类型的全局变量该用什么方式处理比较好?  而且那些全局变量会被好多任务使用,比如定位了,才会向平台上报位置,才会在显示屏上显示位置,才会复位状态清0等等。   请大家帮我设计下方案,UCOS我是刚学不太熟悉。
多谢!

最佳答案

查看完整内容[请看2#楼]

用OS和裸机,差大呢。。。 最简单的,你帮我搞个: MP3播放器,播放音乐的时候,同时显示歌词。 你用裸机,是不是觉得很不好搞? 用OS就非常容易了,一个任务放音乐,一个任务显示歌词。 这只是个简单的例子,其他的,还有N多应用场景。 至于SYSTEM文件夹,我们是为了方便初学者快速新建工程的。 你想直接按官方的方式,可以按官方的去写代码就是了。 学习你也可以学习ST官方的资料。 至于中断服务函数,不一定非 ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2018-7-10 15:11:42 | 显示全部楼层
lqab1983 发表于 2018-7-11 14:37
那请问原子哥,我现在对UCOS的认识是裸机跑系统的意义也不大,你觉得了?:
1、硬件中断优先级高于任务优 ...

用OS和裸机,差大呢。。。
最简单的,你帮我搞个: MP3播放器,播放音乐的时候,同时显示歌词。
你用裸机,是不是觉得很不好搞?
用OS就非常容易了,一个任务放音乐,一个任务显示歌词。

这只是个简单的例子,其他的,还有N多应用场景。

至于SYSTEM文件夹,我们是为了方便初学者快速新建工程的。
你想直接按官方的方式,可以按官方的去写代码就是了。
学习你也可以学习ST官方的资料。

至于中断服务函数,不一定非得都扔到一个.c,个人习惯。
你喜欢这样,他不喜欢...
总之,按你自己习惯的方式编程就对了,你认为好的,别人不一定认为好。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2018-7-11 02:26:30 | 显示全部楼层
一般可以直接用全局变量,没说用了os就不能用全局变量了。如果需要互斥访问的,就用信号量,或者消息来传递。
回复

使用道具 举报

9

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
74
金钱
74
注册时间
2018-7-10
在线时间
17 小时
 楼主| 发表于 2018-7-11 14:37:15 | 显示全部楼层
那请问原子哥,我现在对UCOS的认识是裸机跑系统的意义也不大,你觉得了?:
1、硬件中断优先级高于任务优先级,原来裸机时中断怎么操作,其实加了UCOS没太大变化;只是要注意中断恢复时哪个任务要继续运作;
2、对于单片机来讲,原来的工程其实任务也都不会特别多,现在的任务只是避免了一些共用的资源被同时互相抢占;
3、如果照您说的全局变量也还可以继续用,那我真觉得象征性的起些任务 意义不特别大。

我的认识对吗?  再有原子哥,你的代码自带了SYSTEM文件夹,其实我比较反感,为什么不能照着ST的官方例程写些比较直接调库的代码,方便大家初学和移植,你的那个usart.c里的中断函数为什么不写在xxx_it.c文件里。而且比较有价值的DMA串口接收,但是你的例子写的是发送。我可能学的比较浅。总感觉看着美中不足。
回复

使用道具 举报

32

主题

171

帖子

0

精华

高级会员

Rank: 4

积分
697
金钱
697
注册时间
2017-1-7
在线时间
75 小时
发表于 2018-7-13 10:25:58 | 显示全部楼层
既然多任务都需要用到的变量,UCOS里面也是可以用全局变量的,如果任务间通信是有联系的,那就跟原子哥说的一样,用信号量、互斥信号量、消息队列
回复

使用道具 举报

20

主题

200

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
462
金钱
462
注册时间
2015-11-28
在线时间
89 小时
发表于 2018-7-16 16:24:30 | 显示全部楼层
lqab1983 发表于 2018-7-11 14:37
那请问原子哥,我现在对UCOS的认识是裸机跑系统的意义也不大,你觉得了?:
1、硬件中断优先级高于任务优 ...

额...(1)可以通过这样那样的方法在硬件中断里面加一次任务调度~ 可以通过中断加调度完成一些裸机来不了的操作.任务A,B两个完全不想干的任务.任务A正在跑 中断调度 变成任务B. 这个中断可以在A任务的任意地方任意时刻产生并跳到任务B.
(2) 看工程. 工程比较简单. 裸机当然好啦.但是一旦工程复杂起来.尤其是多任务和时序问题.不用操作系统,裸机玩不了...(能实现,但是非常非常麻烦)
(3) 你想说系统的 信号量 这个东西是么? 他是和多任务进行配合的.单独的拿出来讲他和全局变量几乎没区别.但是配合上多任务,就很神奇了.


你的问题全部都是基于,你对操作系统的认识不足....

工程简单的话 用个鸡毛操作系统.上了操作系统还会影响性能.
工程复杂的话, 操作系统简直就是开挂~谁用谁知道~

最后.关于你吐槽否定 ucos 和原子的 system文件夹.   你知道system文件夹里面的delay 原子写的多用心么? 有多好用你知道么? 裸机或者OS都能用 .usart 不写在it.c还不是为了方便移植啊 大兄弟.
回复

使用道具 举报

19

主题

45

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1235
金钱
1235
注册时间
2016-2-20
在线时间
309 小时
发表于 2018-7-25 22:23:05 | 显示全部楼层
森海有眼泉 发表于 2018-7-16 16:24
额...(1)可以通过这样那样的方法在硬件中断里面加一次任务调度~ 可以通过中断加调度完成一些裸机来不了的 ...

我也想请教类似问题:这几天玩uCOSII,定义了一个全局变量在串口中断中用,发现再次进中断的时候,这个变量会被清零。代码中肯定没有清零。没查出原因。还有DMA.......,操作系统有好多不明白的。不是简单的按个按钮,点个灯,就"精通"uCOS了。
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-23 04:41

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表