sem_timedwait 等函数延时等待时间问题(内部)。
1问题描述:
我们在使用 sem_timedwait 等函数时会设置延时等待时间,例如设置为 30,即等待 30ms。
2. 测试结果:
而通过时间函数测量,具体的延时等待时间大概在 30.6~30.9ms 不等,以下为龙芯 2K1000,1000Hz、 Zynq7000,100Hz板卡上的测试结果:
下图为龙芯 2K 上测试结果:
以下为 Zynq7000 上测试结果:
3. 具体原因:
问题定位在系统默认使用的时间转换函数 __timespecTimeoutTick 会额外补偿 1 个 tick 的时间,
即输入参数为 30 是,该函数返回 31,从而导致最终的结果时间增加了 1 tick 时间。
下图为时间转换函数 __timespecTimeoutTick,当输入 30 时,该函数返回 31:
4.临时解决方案
在 bsp 里面加入内核启动参数:tmcvtsimple=n 即可解决。原因是默认使用的转换函数会额外补偿一个 tick。
可根据客户具体需要进行两种函数切换的修改。
Related Articles
添加标准 C 库头文件会与 SylixOS 内部数据结构冲突
Q: 为什么加入一些标准 C 库头文件会与 SylixOS 内部数据结构冲突? SylixOS 为了提高兼容性与稳定性,SylixOS 提供了一套最适合自身多线程操作系统特点的标准 C 库(暂不包含数学库). 这套 C 库相关代码是从其他开源项目中演变而来。当然为了配合 SylixOS 系统,很多地方做出了修改。 这些库中相关的定义会随着 #include <SylixOS.h> 一同引入用户程序,当用户引用其他辅助 C 库时, 可能产生一些重复定义问题。 这里推荐使用 SylixOS 提供的 ...
CPU 资源百分比查看及阻塞事件情况
问:线程占用 CPU 资源百分比的运行情况在哪里查看?以及线程阻塞事件的具体情况? 答:可以通过SylixOS中的 top 或者 cpuus 指令查看线程占用CPU资源的运行情况。 如果要查看消息队列的动态情况,可以通过 SylixOS 中的 tp 指令查看线程阻塞事件的句柄。 如果阻塞的 STAT 状态为 msgq,则可以通过“msgq 句柄”查看阻塞消息队列的具体信息。 如果阻塞状态 STAT 为 sem,则可以通过“sem 句柄”查看阻塞信号事件的具体信息。
SylixOS目前支持3D图形开发
问:SylixOS 目前支持 3D 图形开发的 GPU 有哪些? 答: GPU型号 厂商 支持平台 支持接口标准 说明 Mali400 ARM 全志T3/T7 OpenGL ES 2.0 T3平台可商用,T7平台全志未提供支持 JM7200 景嘉微 飞腾 OpenGL 1.5 可商用 GC2000 Vivante i.MX6Q OpenGL ES 1.1、2.0 内部研究使用
SylixOS 环境变量是怎么样的?
Q: SylixOS 环境变量是怎么样的? SylixOS 拥有一整套环境变量的算法,它定义在 shell 中。 系统上电时,从 /etc/profile 中获取,这些系统的全局环境变量模板 系统全局环境变量可以通过 shell 来修改,然后通过 varsave 命令保存到 /etc/profile 文件中。 进程启动时将通过全局环境变量初始化自身的环境变量,进程内部对环境变量的修改不影响全局环境变量。 更多扩展知识: 参考文章:SylixOS 启动后显示环境变量从 profile 读取失败?
为什么有些文件系统中不能建立链接文件
Q: 为什么有些文件系统中不能建立链接文件? 当使用新的 SylixOS 分级目录管理时, SylixOS 提供了部分的链接文件支持(不支持硬链接, 仅支持 unix 符号链接), 但是仅仅是在根文件系统(root fs)所属的目录中, 目前 SylixOS 的其他文件系统还不支持链接文件, 所以链接文件(symbol path) 必须在 root fs 管辖的目录中(可以满足绝大多数的应用!). 例如: 可以调用 symlink("/yaffs2/n0/etc", "/etc"); 或者执行 ...