想问一下这个代码为什么进不去中断一直在while里卡死?

看了很多资料,用的isp下载器,但是把下载器拔下在重新上电还是这样

在编写STM32程序时,经常会需要在中断里进行延时,有的人会使用变量递减的方式,但是需要进行精确延时的情况,就必须要用到定时器,而内核中的滴答定时器SysTick自然就成了不二之选,也就是常用的delay_ms/delay_us函数

但是,往往在中断使用delay函数,特别是在写大工程时,却经常遇到各种奇奇怪怪的bug,比如显示屏异常,串口数据异常,WIFI蓝牙异常等等,只要是涉及到通讯且在通讯中使用了delay延时的设备,均有可能出现异常,最严重的当然就是死机

其实网上也有许许多多的人在咨询这个问题
但是得到的回答无一都是因为中断中延时占了资源,中断中不能停留太长时间等待,所以中断中一定不能使用delay
但是我给出的答案是:中断中可以用delay函数,只需要修改delay函数!


举一个最简单的例子,在外部中断中检测按键按下时使用delay函数消抖

中断程序如下(此处使用的是STM32F0系列,其它系列同理)

不懂的同学可以先看下这篇博客:

程序逻辑中,理论上是主程序串口一直发送运行信息,当按键按下时,LED电平翻转
但是,实际上跑在单片机里的现象是,一旦按下按键,电脑上的串口就再也收不到信息,而按键中断反转LED的功能却是正常的

主程序几乎99%的时间都是在delay函数中的while语句,等待滴答定时器数到0。而在等待的过程中,中断触发了,中断里进入了delay函数,正常执行后,退出时将systick关闭了,使得退出中断后在主程序的delay函数里卡死在while里(systick已经关闭了,不再向下记数)


其实,这个问题从本质上讲无疑就是因为systick定时器资源只有一个,而却被两个进程同时调用产生的冲突
为什么是同时调用呢,因为有了中断,如果不使用中断,那主程序中该函数只会被单次调用

所以在中断中不能使用delay?非也
我们从底层看delay函数,在主程序中跑delay时被中断再进入delay函数时会产生什么冲突呢
1是主程序中的delay计数值会被改变为中断中延时的数值,2是中断后定时器会被关掉

那么我们将delay函数修改如下

加入了delaying_times变量用来防止定时器被关闭

但这并不完美,如果在中断里,程序如果在执行其它内容时消耗了一些时间后再进入delay函数,那么就有可能出现一种情况,在进入delay函数时,计数器已经溢出,也就是CTRL的第16位已经变为0,那么此时记录下来的last_systick_val是重装载后的计数器数值(定时器的计数器是自动重装载计数器)

于是我又加入了一个变量


上面的情况下是只考虑到只进入了一次中断的
那如果我在执行中断中的delay函数时,又发生了一次甚至n次的更高优先级中断并且进入delay函数了呢
这就涉及到一个递归的概念了,我直接摆出代码吧

代码部分需要读者们自己好好理解理解,作者最终的这个程序理论上是可行的,但没有经过大数据的测验,自测在一次中断的情况下是完全无问题的,如果有什么疑问欢迎在评论区留言,如果觉得好用就给该文章点个赞罢~

谢邀(确定没点错?),我不是专业人士,对于电影也只是喜欢没什么研究。之前出于好奇学过博弈论,对于这个问题提供不了多少深刻见解,以下我搜集的一些资料,希望能帮到题主。

1.这部电影对于纳什的重现客观吗?

纳什如电影所示在普林斯顿教书,对于博弈论有开创性贡献,大半生与精神疾病斗争。

现实中纳什的幻觉没有电影中展示的那么精致和有序,更多的包含着听力幻觉和妄想,没有Ed Harris、没有幻想的室友、没有小女孩。

电影中展示的爱情过于”好莱坞“,现实中纳什夫妇的关系要复杂的多,纳什有过多次同性的经历并且和其他女人有过一个孩子。

有兴趣的还是读同名书吧,作者认为电影的创造者们”创造了一个尽管与真实相去甚远,但却真实的的表现了纳什故事的精神。“

有兴趣的可以再看看以上两篇文章。

今天媒体有很多关于纳什的文章,我不太喜欢追新闻,所以只略略看过一个。纳什的生活比电影中展示的要痛苦,其婚姻生活更是一团糟,其夫妇复婚可能与这部电影有关,纳什的孩子继承了其精神疾病。

2.从专业的角度应该如何评价这部电影?

评分和排名国内高于国外,观众高于影评人,豆瓣标签是剧情、励志、爱情、心理。

奥斯卡最佳导演、影片、改编剧本、女配。(最佳男主是《训练日》的丹泽尔·华盛顿,Russell Crowe提名,上一届凭借《角斗士》获得最佳男主角)

导演Ron Howard,代表作:美丽心灵、急速风流、达芬奇密码、换子疑云、铁拳男人(看来导演很擅长刻画天才、内心,擅长讲故事)。

国内的短评多是感叹爱情、励志、人生一类的,国外正面评价的集中在故事性、表演(Russell Crowe多次提及)、现实意义(让普通人了解精神分裂疾病)、导演(好多在跪舔导演和男主)。

专业评论方面积极的评价集中在故事性、导演、Crowe杰出的表演。

负面评价是导演忽略事实、深度不够(用爱来治愈偏执型精神分裂...)、迎合观众、过于好莱坞(追求提名)。

以下是给我印象比较深的评论,来自metacritic

基本意思是导演为了影片”好看“而有意歪曲事实来“迎合”观众,这不仅是对观众的侮辱更是对纳什本人的不敬。

影片是杰作,但也浪费了一个机会。(商业影片的局限性,没有触及冷酷的真实,没有深挖)

搬运完了,我看这部电影时间太久,自己记性也不好,零零星星的片段就不拿出来乱讲了。自己对纳什的关注只是因为对于博弈论的兴趣,虽然现实中从来没用过,但也从没觉得遗憾和后悔。希望以上拼凑的资料能有所帮助。

最后祝愿纳什夫妇一路走好,获得永恒的宁静。

我要回帖

更多关于 c语言怎么跳出while循环 的文章

 

随机推荐