是我的问题吗(程序架构问题)

[复制链接]
7072|44
 楼主| 20120703 发表于 2012-9-6 20:25 | 显示全部楼层 |阅读模式
本帖最后由 20120703 于 2012-9-6 20:28 编辑

首先说明是定时器(程序架构问题)问题



先说明我是用C写程序的。原来我的所有的程序都是这么个框架

void main()
{

       init();  //初始化设置

       for(;;)
         {
              function_a();
              functon_b();
         }
}


最近刚参加工作发现公司里面的人都是这样写的

void main()
{

       init();  //初始化设置

       for(;;)
         {
               if(t_100us==1)
               {
                     t_100us=0;
                     function_a();
               }

                if(t_1ms==1)
               {
                     t_1ms=0;
                     function_b();
               }
         }
}



采用了定时器,定时时间不到则不执行相应功能函数,这个我以前自己写的程序比较随意,程序也不是很长,没有这样用过定时器。看到公司的人很多都这样写,刚开始我有些很郁闷,感觉有点不适应。好多原来写的程序,搞的我现在都不怎么会写了,我的软件架构貌似都错了似的,比如一个简单的数码管动态扫描显示,我之前写的程序,完全没有用定时器就把可以做6位数码管显示啊。现在加上这个感觉很别扭啊。不知道大家的程序都是怎么写的啊。
 楼主| 20120703 发表于 2012-9-6 20:34 | 显示全部楼层
包括有时候我在网上搜的程序也没见过哪个人这样用定时器啊。不知道大家的程序都是怎么写的啊。
mcu5i51 发表于 2012-9-6 20:34 | 显示全部楼层
不必太纠结,单片机编程针对性相当强,能用就行;
我的框架类似标志位吧
int tim;
while(1){

if(tim == 0)
{
tim = n;
a();
}
b();
wait(##);配合定时器标志位,平常SLEEP
}
airwill 发表于 2012-9-6 21:13 | 显示全部楼层
我感觉用定时器是个好习惯
所谓时间驱动.
优点是不容易受软件的改变而相互影响. 特别是系统一旦庞大起来后. 时间基准响应方式的稳定性相对较高.
原野之浪 发表于 2012-9-6 21:20 | 显示全部楼层
玩单片机 玩的就是时间  有时间概念就好办了

比如楼主就没有时间概念

t_100us==1

怎么可能实现100us
原野之浪 发表于 2012-9-6 21:28 | 显示全部楼层
定时器一般定1ms或者10ms
 楼主| 20120703 发表于 2012-9-6 21:30 | 显示全部楼层
玩单片机 玩的就是时间  有时间概念就好办了

比如楼主就没有时间概念

t_100us==1

怎么可能实现100us
原野之浪 发表于 2012-9-6 21:20


你还别说,我是真的没有时间概念啊。
 楼主| 20120703 发表于 2012-9-6 21:31 | 显示全部楼层
怎么可能实现100us
原野之浪 发表于 2012-9-6 21:20


你是说100us内,单片机跑不了多少指令吧,呵呵。
李富贵 发表于 2012-9-6 21:33 | 显示全部楼层
现在写程序只用RTOS的撸过,再也没有楼猪这样的烦恼了。
 楼主| 20120703 发表于 2012-9-6 21:33 | 显示全部楼层
搞的我现在觉得我以前写的程序什么都不是了,感觉以前写的程序都成一团糟了
 楼主| 20120703 发表于 2012-9-6 21:35 | 显示全部楼层
我感觉用定时器是个好习惯
所谓时间驱动.
优点是不容易受软件的改变而相互影响. 特别是系统一旦庞大起来后. 时间基准响应方式的稳定性相对较高.
airwill 发表于 2012-9-6 21:13




我看过STM32自带的软件库里自带的程序例子,也没见这样用定时器吧。是不是因为STM32的速度太快了,足够时间跑程序了。
sogan 发表于 2012-9-6 21:43 | 显示全部楼层
第二种框架应该会稳妥点.但是小程序看不出明显区别的哦.
yuyi21ic 发表于 2012-9-6 21:46 | 显示全部楼层
4L说的有理,正是时间驱动。时间驱动机制可以一定程度上释放CPU,如果再给每个任务的状态细化一下,就弄成多任务处理了。
dong_abc 发表于 2012-9-6 22:00 | 显示全部楼层
看我以前发的帖子。
icecut 发表于 2012-9-6 22:09 | 显示全部楼层
hehe,经验啊...都觉得自己的经验是对的
nongfuxu 发表于 2012-9-6 22:34 | 显示全部楼层
第一个是无限制轮询;
第二个是时间片轮询。
哪个好,得根据程序具体是干什么的了。
 楼主| 20120703 发表于 2012-9-6 22:37 | 显示全部楼层
现在写程序只用RTOS的撸过,再也没有楼猪这样的烦恼了。
李富贵 发表于 2012-9-6 21:33


只刷几位数码管也用RTOS吗
 楼主| 20120703 发表于 2012-9-6 22:39 | 显示全部楼层
大家说的都很好:)
yy251745080 发表于 2012-9-6 23:00 | 显示全部楼层
楼上正解。可以避免一直占用CPU
alhua001 发表于 2012-9-6 23:13 | 显示全部楼层
同意16L的意见。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

21

主题

263

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部