OpenEdv-开源电子网

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

CC2540 OSAL系统事件触发

[复制链接]

1

主题

10

帖子

0

精华

新手上路

积分
41
金钱
41
注册时间
2018-12-6
在线时间
10 小时
发表于 2019-1-9 11:27:20 | 显示全部楼层 |阅读模式
7金钱
OSAL系统操作原理中,使用了一个定时器中断,并启动了自动重装函数osal_start_reload_timer();定时器事件做的是LED1每隔2MS取反一次。

if ( SBP_PERIODIC_EVT_PERIOD )
      {
        // SBP_PERIODIC_EVT_PERIOD 为2ms      
        // 下面的这个函数是自动重装的函数,只要启动之后,就会定时 产生 SBP_PERIODIC_EVT 事件
        osal_start_reload_timer( SimpleBLETest_TaskID, SBP_PERIODIC_EVT, SBP_PERIODIC_EVT_PERIOD );
      }


同时新增了一个事件用于计算数据的,代码如下,是用osal_set_event()函数触发事件的,

void SaO2_Init( uint8 task_id )
{
    SaO2_TaskID = task_id;
    osal_set_event( SaO2_TaskID, SaO2_EVT );
}  


uint16 SaO2_ProcessEvent( uint8 task_id, uint16 events )
{
  VOID task_id;

  if( events & SaO2_EVT )
      {
        SaO2_Heart_Process();
        osal_set_event( SaO2_TaskID, SaO2_EVT );
       return(events ^ SaO2_EVT);
      }

   return 0;
}  


然后问题就是:如果单独使用 osal_start_reload_timer() 或者 osal_set_event() 的时候都能正常运行,达到预期效果,但是两个函数同时使用之后,就会导致定时器事件触发的频率改变,LED不再是2MS做一次取反。

有大神来解决下我的疑问吗

最佳答案

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

问题已解决,因为这两个函数都是用系统定时器计数的,所以会产生冲突;我把其中一个换成TIMER1就解决这个问题了
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

10

帖子

0

精华

新手上路

积分
41
金钱
41
注册时间
2018-12-6
在线时间
10 小时
 楼主| 发表于 2019-1-9 11:27:21 | 显示全部楼层
问题已解决,因为这两个函数都是用系统定时器计数的,所以会产生冲突;我把其中一个换成TIMER1就解决这个问题了
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2019-1-10 02:50:11 | 显示全部楼层
帮顶
回复

使用道具 举报

1

主题

10

帖子

0

精华

新手上路

积分
41
金钱
41
注册时间
2018-12-6
在线时间
10 小时
 楼主| 发表于 2019-1-10 08:37:03 | 显示全部楼层
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-22 21:38

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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