【方法】STM32 FreeRTOS系统errno变量做到线程安全的方法
发布日期:2021-06-29 10:16:59
浏览次数:3
分类:技术文章
本文共 603 字,大约阅读时间需要 2 分钟。
默认情况下,移植完FreeRTOS系统后,errno变量并不是线程安全的,所有的线程都是共用一个全局的errno变量。
为了解决这个问题,可以重写Keil MDK的__aeabi_errno_addr函数重新指定errno变量的存放位置,使其返回FreeRTOS定义的FreeRTOS_errno全局变量的地址。
volatile int *__aeabi_errno_addr(void){ extern int FreeRTOS_errno; // 从任务A切换到任务B时, FreeRTOS会将errno值保存到A任务的TaskHandle_t结构体里面, 然后将B任务的errno值从TaskHandle_t恢复到这个变量中 return &FreeRTOS_errno;}
FreeRTOS的FreeRTOS_errno功能必须启用configUSE_POSIX_ERRNO选项后才能使用。于是在FreeRTOSConfig.h中添加:
#define configUSE_POSIX_ERRNO 1
测试代码:
sqrt(-10);printf("%s: errno=%d\n", __FUNCTION__, errno);
在一个线程中执行sqrt(-10)后,errno变为非零值。此时另一个线程中打印errno变量的值,结果仍为0。
这样就能彻底解决errno线程不安全的问题。
转载地址:https://blog.csdn.net/ZLK1214/article/details/106087447 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
做的很好,不错不错
[***.243.131.199]2024年04月05日 15时30分18秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
树莓派Raspberry Pi的嵌入式QT平台
2019-04-29
apache https
2019-04-29
Debian Jessie安装支持HTML5音视频的Chromium浏览器听百度音乐
2019-04-29
nanopi2 启动信息
2019-04-29
POS打印机驱动大全
2019-04-29
phpstudy https
2019-04-29
centos apache 最新版HTTPS配置
2019-04-29
树莓派添加中文语音合成功能
2019-04-29
kangle https设置
2019-04-29
Linux下EasyPanel版本安装及升级
2019-04-29
raspberry pi(树莓派) + easycap d60 视频采集
2019-04-29
WebRTC
2019-04-29
rfc5766-turn-server NAT
2019-04-29
webrtc详细教程
2019-04-29
Android IOS WebRTC 音视频开发总结
2019-04-29
报表图表样式
2019-04-29
Android开发资源收集
2019-04-29
android模板图例
2019-04-29
树莓派网线直连
2019-04-29