OpenEdv-开源电子网

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

ucos/ii软件定时器

[复制链接]

7

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
85
金钱
85
注册时间
2012-11-2
在线时间
5 小时
发表于 2013-3-25 21:46:35 | 显示全部楼层 |阅读模式
为什么我用UCOS/II的软件定时器
1.
 tmr1=OSTmrCreate(10,10,OS_TMR_OPT_PERIODIC,(OS_TMR_CALLBACK)tmr1_callback,0,"tmr1",&err);  //100ms执行一次
我把这个函数配置的这么多!
2.
我把os_cfg.h里面的
#define OS_TMR_CFG_TICKS_PER_SEC 100u  /*     Rate at which timer management task runs (Hz)            */
// 1s/100=10ms,往后使用的定时器...
配的这么多
我什么我写的电子时钟的比正常的表要慢10几倍啊?
也就是说我的定时器定时的是1s中断一次,却慢了10几倍啊?
奋斗!
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

7

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
85
金钱
85
注册时间
2012-11-2
在线时间
5 小时
 楼主| 发表于 2013-3-27 21:03:08 | 显示全部楼层
回复【3楼】Eric2013:
---------------------------------
//原来是tcnt没有清零所以导致我的时间慢了10几倍,
//我没有清零他还是要变可能是因为tcnt被定义成了U8
//及unsigned int可能是加到溢出了,又从0开始加,所以感觉慢了
//十几倍!以后一定要注意小问题啊!但是小问题会导致大错误,浪费时间啊 !所以做事要细心啊!
//呵呵!
奋斗!
回复 支持 1 反对 0

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2013-3-26 00:29:32 | 显示全部楼层
回复【楼主位】冯海生:
---------------------------------
先检查你的时钟配置正确了没有.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

5

主题

166

帖子

2

精华

高级会员

Rank: 4

积分
506
金钱
506
注册时间
2012-10-8
在线时间
0 小时
发表于 2013-3-26 15:46:31 | 显示全部楼层
感觉楼主没有认真的阅读软件定时器,软件定时器需要信号量触发的,触发函数在这里
oid  OSTimeTickHook (void)
{
#if OS_APP_HOOKS_EN > 0u
    App_TimeTickHook();
#endif

#if OS_TMR_EN > 0u
    OSTmrCtr++;
    特别注意这里,你的慢10倍估计是 OS_TICKS_PER_SEC / OS_TMR_CFG_TICKS_PER_SEC = 10ms 触发一次
    if (OSTmrCtr >= (OS_TICKS_PER_SEC / OS_TMR_CFG_TICKS_PER_SEC)) {
        OSTmrCtr = 0;
        OSTmrSignal();
    }
#endif
}
回复 支持 反对

使用道具 举报

7

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
85
金钱
85
注册时间
2012-11-2
在线时间
5 小时
 楼主| 发表于 2013-3-26 20:54:49 | 显示全部楼层
谢谢各位了!
奋斗!
回复 支持 反对

使用道具 举报

81

主题

1002

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1876
金钱
1876
注册时间
2014-9-10
在线时间
208 小时
发表于 2014-12-19 18:39:30 | 显示全部楼层
回复【5楼】冯海生:
---------------------------------
怎么弄的?我设置的10,50.100ms,500ms。
tmr1 = OSTmrCreate(10, 50, OS_TMR_OPT_PERIODIC, /* 500ms执行一次  */
   
   (OS_TMR_CALLBACK) tmr1_callback, 0, 
   
   (u8 *) tmr1, &err);
打开时有很多时候就好几秒才跑到回调函数,然后后面就是正常的。

tcnt时什么,需要清零吗?在哪里清零?
小小蜗牛
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2015-4-7
在线时间
3 小时
发表于 2015-4-7 16:57:04 | 显示全部楼层
需要查看“os_cfg.h ”里的“ #define   OS_TMR_CFG_TICKS_PER_SEC   ” 定义为  “100”  时,
tmr1 = OSTmrCreate(10, 50, OS_TMR_OPT_PERIODIC, (OS_TMR_CALLBACK) tmr1_callback, 0,  (u8 *) tmr1, &err);//500mS执行一次
这条语句所期望的时间才能正常。
回复 支持 反对

使用道具 举报

81

主题

1002

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1876
金钱
1876
注册时间
2014-9-10
在线时间
208 小时
发表于 2015-10-26 09:29:37 | 显示全部楼层
回复【7楼】super_ver:
---------------------------------
谢谢了。。。
小小蜗牛
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-23 12:51

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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