weatt123456789 发表于 2017-7-22 21:59:47

中断的问题(主函数调用的函数中断中重复调用的问题

本帖最后由 weatt123456789 于 2017-7-22 22:08 编辑

main
{
   HC_595();    //调用74HC595 刷新 外部端口状态
}


串口中断

      HC_595();//调用74HC595 刷新 外部端口状态


void HC_595()
{
:
:   
:
}

我担心,如果刷新主函数中的74HC595 到一半的时候,进入中断刷新完74HC595,中断结束后又刷未完成的74HC595(主要是这时候刷新的数据已经不完整了)


怎么办?

有没有办法判断 进入中断后,判断是不是从74HC595中进入中断的,如果是那么退出中断时,让上级函数跳出或者重新完整的执行一次也可以?或者有什么其它的办法。


以前用主函数循环刷新,改变变量以达到刷新的目的,但是,我发现响应速度跟不上,例如,串口接收到指令后要等起码半秒后端口才会改变这个响应时间受不了呢。

xinfa190 发表于 2017-7-22 22:09:35

如果是keil,编译的时候会有警告的,通过一个可重入关键字,可以消掉这个警告,但仅仅是消掉这个警告,问题可能解决不了;我觉得这个问题通过标志位应该可以解决
还是建议从根本上解决,不要在主函数和中断函数中调用同一个函数

more 发表于 2017-7-22 22:33:04

可以在主程序执行HC_595()前关闭串口中断,执行完后再打开。

NJ8888 发表于 2017-7-23 12:03:28

串口更新映射数据,由主程序写到595中

fsmcu 发表于 2017-7-23 21:33:28

最好不要中断和主循环里面调用一个函数,处理不好很容易出问题的,
页: [1]
查看完整版本: 中断的问题(主函数调用的函数中断中重复调用的问题