硬汉嵌入式论坛

 找回密码
 立即注册
查看: 4185|回复: 12
收起左侧

[μCOS-III] 关于新版本uCOSIII3.08的疑问

[复制链接]

76

主题

237

回帖

465

积分

高级会员

积分
465
发表于 2021-1-23 11:06:07 | 显示全部楼层 |阅读模式
本帖最后由 kokoromi 于 2021-1-23 11:07 编辑

在官方手册里发现了两个配置选项,在3.08的系统和以前的系统中没找到,如下:Monitor Configuration
OS_CFG_MON_EN

When OS_CFG_MON_EN is set to  DEF_ENABLED , it enables the monitor services and data structures. If your application does not require monitors, set this option to DEF_DISABLED to reduce the amount of code and data space needed by μC/OS-III.

OS_CFG_MON_DEL_EN

If your application needs to delete a monitor with OSMonDel()  once they're created, set OS_CFG_MON_DEL_EN to DEF_ENABLED, if not, set this option to DEF_DISABLED. Critical applications should not delete kernel objects once the kernel is started.


上面这两个配置干啥用的?为什么源码里面没有呢?

还有新的系统修改了太多的东西了,硬汉有没有出新版系统详解的计划?




回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
111540
QQ
发表于 2021-1-23 11:14:33 | 显示全部楼层
这个不用管,没啥用。

暂时没有做最新版本解析的打算。
回复

使用道具 举报

76

主题

237

回帖

465

积分

高级会员

积分
465
 楼主| 发表于 2021-1-23 12:03:51 | 显示全部楼层
eric2013 发表于 2021-1-23 11:14
这个不用管,没啥用。

暂时没有做最新版本解析的打算。

好吧,看来得硬啃英文手册了...
我看新版本系统可以取消空闲任务,如果没有空闲任务,并且所有用户任务都处于挂起状态,那系统接下来该怎么运行,有点懵...
回复

使用道具 举报

3

主题

381

回帖

390

积分

高级会员

积分
390
发表于 2021-1-23 14:08:05 | 显示全部楼层
这类小型开源软件,读代码就能了解一切。楼主为什么不尝试一下读源码呢?
回复

使用道具 举报

76

主题

237

回帖

465

积分

高级会员

积分
465
 楼主| 发表于 2021-1-23 14:17:06 | 显示全部楼层
glory 发表于 2021-1-23 14:08
这类小型开源软件,读代码就能了解一切。楼主为什么不尝试一下读源码呢?

读了,没看懂....
回复

使用道具 举报

76

主题

237

回帖

465

积分

高级会员

积分
465
 楼主| 发表于 2021-1-23 14:18:28 | 显示全部楼层
glory 发表于 2021-1-23 14:08
这类小型开源软件,读代码就能了解一切。楼主为什么不尝试一下读源码呢?

还有那个TLS,看了挺多资料,也没搞明白到底是什么,怎么用...
回复

使用道具 举报

3

主题

381

回帖

390

积分

高级会员

积分
390
发表于 2021-1-23 14:44:37 | 显示全部楼层
TLS故名思议,就是线程局部存储。
以前C语言发明时还没有多线程概念,很多C库函数都用了全局变量,这些东西在多线程环境下会导致错误。于是就出现了TLS概念,让每个线程都具备一份独立的“全局变量”,比如errno这种变量。
用户自己也可以利用TLS做一些存储,这样在每个线程里就能用同一个API获得独立的变量。
TLS的使用要结合C语言库和RTOS来移植;不同的RTOS移植方法不同。
回复

使用道具 举报

3

主题

381

回帖

390

积分

高级会员

积分
390
发表于 2021-1-23 14:45:47 | 显示全部楼层
还是建议多看几遍,多找文章看。不要没看懂就觉得读代码没用,多看了还是有用的。
回复

使用道具 举报

16

主题

148

回帖

196

积分

初级会员

积分
196
发表于 2021-1-25 09:34:19 | 显示全部楼层
http://www.armbbs.cn/forum.php?mod=viewthread&tid=96749 这是关于TLS的理解  真的建议楼主去阅读源码,ucos的源码写的真的很好,读懂了好处很多的
回复

使用道具 举报

21

主题

463

回帖

526

积分

金牌会员

积分
526
发表于 2021-1-25 10:37:32 | 显示全部楼层
kokoromi 发表于 2021-1-23 14:18
还有那个TLS,看了挺多资料,也没搞明白到底是什么,怎么用...

C语言C11标准关键字thread的实现包含2个部分:编译器实现 + OS实现。
TLS是支持C语言C11标准关键字thread的OS实现。
现实的使用中,比如你写的库包含一个extern或者static类型的变量(全局空间),不同的线程调用你的库会导致extern或者static类型的变量不受控(每个线程都改变这个变量,读的时候会混乱)。
extern或者static类型的变量加了thread关键字,编译器就会在函数调用者的线程空间保留独立的拷贝,不同线程相互之间不影响。TLS就是用来实现这个thread关键字功能的OS实现。
如果用到extern或者static类型的变量,thread关键字是编写可重入函数的基本保证(满足C11标准的编译器能够正确处理thread关键字)。
结论:满足C11标准的条件,编译器必需要支持thread关键字,必须要有OS支持(OS必须提供TLS)。反过来说,OS不提供TLS,就算编译器支持thread关键字,也用不了。
回复

使用道具 举报

76

主题

237

回帖

465

积分

高级会员

积分
465
 楼主| 发表于 2021-1-25 14:12:25 | 显示全部楼层
h_007 发表于 2021-1-25 10:37
C语言C11标准关键字thread的实现包含2个部分:编译器实现 + OS实现。
TLS是支持C语言C11标准关键字threa ...

我如果要使用C标准库里的函数,就必须得用这个tls文件吗?之前用ucosiii都没注意到这些...
回复

使用道具 举报

21

主题

463

回帖

526

积分

金牌会员

积分
526
发表于 2021-1-25 17:14:31 | 显示全部楼层
C标准库,setjmp和longjmp部分,跟上下文相关,主要是用来处理异常的,应该算不可重入。
stdio部分(主要是printf类),应该算不可重入。
其他应该都是可重入的。使用前查一下手册说明即可。
使用C标准库,“不可重入”只是提醒在多线程环境下调用函数需要注意,不一定说需要TLS支持。要看实际需求
回复

使用道具 举报

76

主题

237

回帖

465

积分

高级会员

积分
465
 楼主| 发表于 2021-1-26 15:12:22 | 显示全部楼层
h_007 发表于 2021-1-25 17:14
C标准库,setjmp和longjmp部分,跟上下文相关,主要是用来处理异常的,应该算不可重入。
stdio部分(主要 ...

感谢。虽然还是不明白具体该怎么用....
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-11-1 07:17 , Processed in 0.384117 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表