你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

请问,串口中断里 终止线程,为什会程序会死?

[复制链接]
shixi920911 提问时间:2015-12-10 19:15 /
如题,stm32f4  串口中断里接收数据,然后终止一个线程,osThreadTerminate(StartActionHandle); 为什么一终止线程就出错了,有什么要注意的点吗?是不是要设置线程的优先级?
收藏 评论7 发布时间:2015-12-10 19:15

举报

7个回答
埃斯提爱慕 回答时间:2015-12-10 19:18:25
提示: 作者被禁止或删除 内容自动屏蔽
yanhaijian 回答时间:2015-12-10 19:19:18
呵呵,在操作系统里面中断和线程里面环境是不一样的,许多能够在中断里面调用的函数在函数名里都有ISR的。
shixi920911 回答时间:2015-12-10 21:15:47
yanhaijian 发表于 2015-12-10 19:19
呵呵,在操作系统里面中断和线程里面环境是不一样的,许多能够在中断里面调用的函数在函数名里都有ISR的。 ...

什么意思,ISR就是中断服务程序。在中断里终止线程和这个有关系么?
shixi920911 回答时间:2015-12-10 21:16:15

谢谢谢谢
zhangdaijin 回答时间:2015-12-11 08:53:05
yanhaijian 回答时间:2015-12-11 09:10:38
shixi920911 发表于 2015-12-10 21:15
什么意思,ISR就是中断服务程序。在中断里终止线程和这个有关系么?

你没理解我的意思,操作系统中能够在中断中调用的接口函数与在线程中调用的是不一样的,比如freertos中挂起任务的API接口就有vTaskResume()和vTaskResumeFromISR(),前一个用于线程中挂起线程,后一个用于中断中挂起线程。至于具体的原因我举一个例子:现在正在执行线程A,突然来了个串口中断,进入中断后硬件会把你刚才的运行环境压栈,你在中断里面删除掉了线程A,串口中断执行结束时它要返回到进入中断之前的那个环境里面(即线程A),而线程A已经被你删除了,后果你知道的就是程序跑飞了。
shixi920911 回答时间:2015-12-11 21:24:43
yanhaijian 发表于 2015-12-11 09:10
你没理解我的意思,操作系统中能够在中断中调用的接口函数与在线程中调用的是不一样的,比如freertos中挂 ...

恩。理解了。谢谢你。

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版