OpenEdv-开源电子网

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

关于串口中断的问题

[复制链接]

14

主题

43

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
217
金钱
217
注册时间
2015-9-27
在线时间
27 小时
发表于 2016-11-14 09:27:31 | 显示全部楼层 |阅读模式
5金钱
我要用串口调试助手向stm32发送一些自己定义的指令集,我写出来会使得串口中断服务函数过于复杂。请问一下怎么才能使得中断服务函数更加的短小精悍,停留在中断服务函数的时间更短。

最佳答案

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

楼主的问题,提得对.中断服务函数一定要短小精快.建议在中断服务函数里面获取到数据后.产生一个标志位.(全局变量,请注意与中断共享请使用原子操作).到大循环中去处理剩下的不差急的事情,也就是说,中断服务函数可以发成两部分来写.其实操作系统里面就是这么玩的.
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

50

主题

1805

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6662
金钱
6662
注册时间
2016-5-29
在线时间
910 小时
发表于 2016-11-14 09:27:32 | 显示全部楼层
楼主的问题,提得对.中断服务函数一定要短小精快.建议在中断服务函数里面获取到数据后.产生一个标志位.(全局变量,请注意与中断共享请使用原子操作).到大循环中去处理剩下的不差急的事情,也就是说,中断服务函数可以发成两部分来写.其实操作系统里面就是这么玩的.
回复

使用道具 举报

30

主题

1170

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1993
金钱
1993
注册时间
2016-2-16
在线时间
527 小时
发表于 2016-11-14 09:44:03 | 显示全部楼层
中断只接收,不处理就好了,用DMA或者环形缓冲区都可以
回复

使用道具 举报

21

主题

387

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1043
金钱
1043
注册时间
2016-9-8
在线时间
213 小时
发表于 2016-11-14 10:03:51 | 显示全部楼层
shop60994719.taobao.com
回复

使用道具 举报

1

主题

561

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1183
金钱
1183
注册时间
2015-5-28
在线时间
149 小时
发表于 2016-11-14 10:21:08 | 显示全部楼层
其实最好的方式我觉得是使用RTOS操作系统,在中断函数里面向消息队列里面丢数据,然后通过信号通知其他任务来对这个队列里面的数据进行处理,操作系统会自动调度过去的~
回复

使用道具 举报

22

主题

751

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1605
金钱
1605
注册时间
2015-6-10
在线时间
222 小时
发表于 2016-11-14 14:47:31 | 显示全部楼层
我用的是接收中断加上空闲中断,接收中断接收,空闲处理
回复

使用道具 举报

6

主题

45

帖子

0

精华

初级会员

Rank: 2

积分
175
金钱
175
注册时间
2016-5-25
在线时间
29 小时
发表于 2016-11-15 13:47:20 | 显示全部楼层
很赞同2喽的说法呦
<a target="_blank" href="http://wpa.qq.com/msgrd?v=3&uin=10984466&site=qq&menu=y
回复

使用道具 举报

28

主题

176

帖子

0

精华

高级会员

Rank: 4

积分
738
金钱
738
注册时间
2014-7-1
在线时间
180 小时
发表于 2016-11-15 14:51:43 | 显示全部楼层
借鉴二楼的说法
回复

使用道具 举报

1

主题

5

帖子

0

精华

新手上路

积分
22
金钱
22
注册时间
2016-11-13
在线时间
3 小时
发表于 2016-11-15 17:06:07 | 显示全部楼层
二楼说的好
回复

使用道具 举报

14

主题

43

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
217
金钱
217
注册时间
2015-9-27
在线时间
27 小时
 楼主| 发表于 2016-11-17 17:06:04 | 显示全部楼层
操作系统 发表于 2016-11-14 09:27
楼主的问题,提得对.中断服务函数一定要短小精快.建议在中断服务函数里面获取到数据后.产生一个标志位.(全局 ...

嗯呐,之前在网上看到中断服务函数要短小精悍,自己写的串口中断服务函数里面包含的内容太多了,容易让单片机卡死在里面。
回复

使用道具 举报

14

主题

43

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
217
金钱
217
注册时间
2015-9-27
在线时间
27 小时
 楼主| 发表于 2016-11-17 17:06:46 | 显示全部楼层
憨厚诚实大叔 发表于 2016-11-14 09:44
中断只接收,不处理就好了,用DMA或者环形缓冲区都可以

我用了一个线性队列,等会我试试环形的。谢谢亲
回复

使用道具 举报

14

主题

43

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
217
金钱
217
注册时间
2015-9-27
在线时间
27 小时
 楼主| 发表于 2016-11-17 17:08:05 | 显示全部楼层
密耳 发表于 2016-11-14 10:03
https://item.taobao.com/item.htm?spm=a1z10.1-c.w4023-1255750304.10.CDrK3v&id=537439006677

回复

使用道具 举报

14

主题

43

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
217
金钱
217
注册时间
2015-9-27
在线时间
27 小时
 楼主| 发表于 2016-11-17 17:08:41 | 显示全部楼层
小陀螺爱炒蛋 发表于 2016-11-14 10:21
其实最好的方式我觉得是使用RTOS操作系统,在中断函数里面向消息队列里面丢数据,然后通过信号通知其他任务 ...

嗯呐,32系统这块没有学习,不过听过系统很厉害
回复

使用道具 举报

14

主题

43

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
217
金钱
217
注册时间
2015-9-27
在线时间
27 小时
 楼主| 发表于 2016-11-17 17:09:28 | 显示全部楼层
止天 发表于 2016-11-14 14:47
我用的是接收中断加上空闲中断,接收中断接收,空闲处理

定标志位吗?
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-25 08:23

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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