跨度稍微大一点,现在我们来讨论一个关于共享资源的问题。例如在程序中定义了一个全局数组变量delaytimes[] 这个全局变量除了运行的任务可以访问,中断异常处理也可以访问,那么问题来了,任务1先对delaytimes[] 进行读操作,在任务1读的过程中Systick触发了任务切换,这个时候切换到了任务2,恰巧任务2对delaytimes[] 写操作,改变了delaytimes[]的一部分内容,当任务再切换回任务1的时候,接着读取delaytimes[] 中的内容,这样后面再读取的数据就不确定是否正确了。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
647985d0dcf51e735f.png (11.62 KB, 下载次数: 0)
下载附件 保存到相册
2019-6-22 14:48 上传
396135d0dcfc31c351.png (21.75 KB, 下载次数: 0)
下载附件 保存到相册
2019-6-22 14:50 上传
//进入临界保护区
uint32_t TaskEnterCritical()
{
uint32_t primask;
primask = __get_PRIMASK();
__disable_irq(); //关中断
return primask;
}
//退出临界保护区
void TaskExitCritical(uint32_t status)
{
__set_PRIMASK(status);
}
一周热门 更多>