OpenEdv-开源电子网

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

关于STM32程序执行顺序问题,谢谢

[复制链接]

4

主题

7

帖子

0

精华

新手上路

积分
26
金钱
26
注册时间
2018-8-6
在线时间
2 小时
发表于 2018-8-15 11:14:03 | 显示全部楼层 |阅读模式
        我有个关于单片机有个疑问,一直不是很明白,希望大佬们能指点一番,谢谢。就是我想把单片机在while循环中执行程序,我一直把它想象成一个人一直在循环的跑,假设在这过程中产生了中断,这个人又去执行中断程序,如果中断程序中有delay延迟函数,比如delay(500),那么在为什么在执行delay(500)过程中,又会单片机中又会产生其他的中断?相当于一个人在执行delay,就是在等待,又没有执行其他的程序,为什么会产生其他中断呢?因为STM32有操作系统吗?还是有些程序是并行执行的?
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

882

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3071
金钱
3071
注册时间
2018-2-7
在线时间
285 小时
发表于 2018-8-15 15:54:10 | 显示全部楼层
康君6 发表于 2018-8-15 14:10
还是谢谢你,不过我的疑问是,假如进入中断,然后马上进入中断中的delay函数,执行delay函数。有可能在执 ...

比如程序在执行延时的时候,这时候串口中有数据进来,那么程序肯定就要去接收串口数据。这时候延时程序就会暂停,等接收完串口数据后,继续执行延时程序。这时候的延时程序就会比设置的时间长。程序执行都是串行的,中断就相当于goto语句,会直接跳转到另一个地方去。所以为了避免有的中断程序被新的中断程序打断,就要设置中断优先级。只有优先级高的中断可以打断优先级低的中断,优先级低的中断不能打断优先级高的中断。
回复 支持 1 反对 0

使用道具 举报

1

主题

882

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3071
金钱
3071
注册时间
2018-2-7
在线时间
285 小时
发表于 2018-8-15 13:33:50 | 显示全部楼层
单片机在中断中执行延时的时候,如果有新的中断发生当然就会跳到新的中断中去执行。这就是中断嵌套。所以一般中断程序要尽可能的短,避免在中断执行的时候又有新的中断发生。如果中断在执行的时候,不想被打断,那么进入中断的时候,就关闭单片机所有中断,当中断程序执行完之后在打开所有中断。
回复 支持 反对

使用道具 举报

4

主题

7

帖子

0

精华

新手上路

积分
26
金钱
26
注册时间
2018-8-6
在线时间
2 小时
 楼主| 发表于 2018-8-15 14:10:09 | 显示全部楼层
HXYDJ 发表于 2018-8-15 13:33
单片机在中断中执行延时的时候,如果有新的中断发生当然就会跳到新的中断中去执行。这就是中断嵌套。所以一 ...

还是谢谢你,不过我的疑问是,假如进入中断,然后马上进入中断中的delay函数,执行delay函数。有可能在执行这个delay的过程中单片机产生其他中断吗?我不明白的是为什么会在执行这个delay的过程会发生其他中断?难道是有操作系统,程序是并行的?
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-2 20:17

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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