嵌入式学习小组
直播中

寇昕

7年用户 248经验值
私信 关注

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

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

回帖(6)

宋明星

2020-4-14 06:56:53
用OS和裸机,差大呢。。。
最简单的,你帮我搞个: MP3播放器,播放音乐的时候,同时显示歌词。
你用裸机,是不是觉得很不好搞?
用OS就非常容易了,一个任务放音乐,一个任务显示歌词。
这只是个简单的例子,其他的,还有N多应用场景。
至于SYSTEM文件夹,我们是为了方便初学者快速新建工程的。
你想直接按官方的方式,可以按官方的去写代码就是了。
学习你也可以学习ST官方的资料。
至于中断服务函数,不一定非得都扔到一个.c,个人习惯。
你喜欢这样,他不喜欢...
总之,按你自己习惯的方式编程就对了,你认为好的,别人不一定认为好。
举报

陈嘉宁

2020-4-14 07:15:01
一般可以直接用全局变量,没说用了os就不能用全局变量了。如果需要互斥访问的,就用信号量,或者消息来传递。
举报

钱铖

2020-4-14 07:20:01
那请问原子哥,我现在对UCOS的认识是裸机跑系统的意义也不大,你觉得了?:
1、硬件中断优先级高于任务优先级,原来裸机时中断怎么操作,其实加了UCOS没太大变化;只是要注意中断恢复时哪个任务要继续运作;
2、对于单片机来讲,原来的工程其实任务也都不会特别多,现在的任务只是避免了一些共用的资源被同时互相抢占;
3、如果照您说的全局变量也还可以继续用,那我真觉得象征性的起些任务 意义不特别大。
我的认识对吗?  再有原子哥,你的代码自带了SYSTEM文件夹,其实我比较反感,为什么不能照着ST的官方例程写些比较直接调库的代码,方便大家初学和移植,你的那个usart.c里的中断函数为什么不写在xxx_it.c文件里。而且比较有价值的DMA串口接收,但是你的例子写的是发送。我可能学的比较浅。总感觉看着美中不足。
举报

赵竞

2020-4-14 07:31:01
既然多任务都需要用到的变量,UCOS里面也是可以用全局变量的,如果任务间通信是有联系的,那就跟原子哥说的一样,用信号量、互斥信号量、消息队列
举报

更多回帖

发帖
×
20
完善资料,
赚取积分