OpenEdv-开源电子网

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

需要在中断中处理大量数据运算,该如何做

[复制链接]

81

主题

1002

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1876
金钱
1876
注册时间
2014-9-10
在线时间
208 小时
发表于 2014-11-5 10:49:11 | 显示全部楼层 |阅读模式
5金钱
需要在中断中处理大量数据运算,该如何做?
之前是直接在中断里调用了处理函数,随着数据处理的复杂度增加,已经不适合在中断里处理了。
怎样能实现每次中断到时,处理这些数据呢?

最佳答案

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

中断频率是多少,如果中断次数不多,间隔较大,则可以在中断里设置标志位,然后在主程序里判断标志位,运行数据处里函数。 如果中断次数多,就不适合用了。
小小蜗牛
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

9

主题

1385

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
12090
金钱
12090
注册时间
2013-3-8
在线时间
1285 小时
发表于 2014-11-5 10:49:12 | 显示全部楼层
中断频率是多少,如果中断次数不多,间隔较大,则可以在中断里设置标志位,然后在主程序里判断标志位,运行数据处里函数。
如果中断次数多,就不适合用了。
回复

使用道具 举报

81

主题

1002

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1876
金钱
1876
注册时间
2014-9-10
在线时间
208 小时
 楼主| 发表于 2014-11-5 11:23:06 | 显示全部楼层
回复【2楼】augustedward:
---------------------------------
20ms一次。
如何判断标志位被设置了。while(1)里面延时?
小小蜗牛
回复

使用道具 举报

9

主题

1385

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
12090
金钱
12090
注册时间
2013-3-8
在线时间
1285 小时
发表于 2014-11-5 12:00:41 | 显示全部楼层
回复【3楼】jiutianshenjian:
---------------------------------
while(1)
{
if(标志位)

    数据处理。
 }
   其他程序代码!
}

加延时cpu效率就太低了!
回复

使用道具 举报

81

主题

1002

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1876
金钱
1876
注册时间
2014-9-10
在线时间
208 小时
 楼主| 发表于 2014-11-5 13:05:43 | 显示全部楼层
回复【4楼】augustedward:
---------------------------------
在μcos里面,还有很多其他任务
小小蜗牛
回复

使用道具 举报

9

主题

1385

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
12090
金钱
12090
注册时间
2013-3-8
在线时间
1285 小时
发表于 2014-11-5 13:17:52 | 显示全部楼层
回复【5楼】jiutianshenjian:
---------------------------------
那你看看能不能做个数据处理任务?你这个数据处理要占多长时间?最好要远小于20ms。这样才有可能能处理完。还有就是优先级要高。
中断里面发一信号量,在数据处理任务里判断这个信号量,如果有,则处理数据,没有就直接调度任务。
回复

使用道具 举报

81

主题

1002

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1876
金钱
1876
注册时间
2014-9-10
在线时间
208 小时
 楼主| 发表于 2014-11-5 13:38:15 | 显示全部楼层
回复【6楼】augustedward:
---------------------------------
占用时间不清楚。优先级高了,其他任务很难跑了吧。
小小蜗牛
回复

使用道具 举报

9

主题

1385

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
12090
金钱
12090
注册时间
2013-3-8
在线时间
1285 小时
发表于 2014-11-5 14:52:55 | 显示全部楼层
回复【7楼】jiutianshenjian:
---------------------------------
优先级高了,没数据处理时,并不会占用太多时间!最好估算下数据处理时间,这样才能确定这个任务的优先级和延时时间!
回复

使用道具 举报

81

主题

1002

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1876
金钱
1876
注册时间
2014-9-10
在线时间
208 小时
 楼主| 发表于 2014-11-5 16:52:39 | 显示全部楼层
回复【8楼】augustedward:
---------------------------------
我在中断里用了这个:OSTimeDlyResume(8);让8任务优先级高,一中断就让他就绪
8任务里面这么写的:
while(1)
    {
        OSTimeDlyHMSM(0,0,3,500);
        
      
          DataProcess();
        
    }
小小蜗牛
回复

使用道具 举报

9

主题

1385

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
12090
金钱
12090
注册时间
2013-3-8
在线时间
1285 小时
发表于 2014-11-5 16:56:10 | 显示全部楼层
回复【9楼】jiutianshenjian:
---------------------------------
先处理,再延时!
回复

使用道具 举报

81

主题

1002

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1876
金钱
1876
注册时间
2014-9-10
在线时间
208 小时
 楼主| 发表于 2014-11-5 17:48:41 | 显示全部楼层
回复【10楼】augustedward:
---------------------------------
不行,没到时间,处理啥。采集完成才能处理数据。
小小蜗牛
回复

使用道具 举报

9

主题

1385

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
12090
金钱
12090
注册时间
2013-3-8
在线时间
1285 小时
发表于 2014-11-5 17:58:47 | 显示全部楼层
回复【11楼】jiutianshenjian:
---------------------------------
采集3.5s需要?
回复

使用道具 举报

81

主题

1002

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1876
金钱
1876
注册时间
2014-9-10
在线时间
208 小时
 楼主| 发表于 2014-11-5 18:50:34 | 显示全部楼层
回复【12楼】augustedward:
---------------------------------
那个我随便写的,大一点就可以了,延时跑不完的,我在中断里让任务立刻就绪。
我感觉有时候我更像流氓。改程序的时候。
小小蜗牛
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-30 10:28

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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