Yang.Lian
发表于 2024-10-18 11:23:15
CosyOS 发表于 2024-10-14 08:55
首先,我猜测你的
用户定时查询初始化状态 设置为 查询状态,=> #define SYSCFG_USERTIMQRYINIT 1
且 ...
先说明,以下我说的都 定时查询初始化状态 设置为 查询状态
后来,我看了一下代码,我意识到,可能是你说的这个原因。
立刻改了一下代码,所有的定时查询都不设置时间,而是触发以后再设置时间,这样就完美的解决了这个问题。
如果在 init_hook 中,设置时间,实际上,是不会触发第一次的。这样就和定时查询设计的初衷背道而驰了
我建议可以参考 libuv 的API设置原文在这里 https://docs.libuv.org/en/v1.x/timer.html
libuv 中,定时器设计了两个参数,timeout 和 repeat,其中timeout 控制第1次延时,repeat 控制第1次以后的其他延时,举个例子
timeout = 0 , repeat= 0 下一个循环就执行1次,然后结束;
timeout = 1000, repeat=0 延时1秒后执行1次,然后结束;
timeout = 1000, repeat=2000 延时1秒以后执行1次,再延时2秒再执行,以后永远按照2秒间隔执行下去
CosyOS
发表于 2024-10-18 20:06:23
Yang.Lian 发表于 2024-10-18 11:23
先说明,以下我说的都 定时查询初始化状态 设置为 查询状态
后来,我看了一下代码,我意识到,可能是你 ...
好的,我思考下。
你可下载最新版试用。
历史版本中,如果未开启 任务管理器,
用户创建的定时查询,ID最大的那个,如果是任务,则不能启动。
新版本中已经修正。
Yang.Lian
发表于 2024-10-19 14:36:53
CosyOS 发表于 2024-10-18 20:06
好的,我思考下。
你可下载最新版试用。
历史版本中,如果未开启 任务管理器,
3.0.4 没有找到下载的地方,我直接去 gitee 下载了最新版的,gvar 改成 copy 了,整体改动不大,细节小调
黄乃贝
发表于 2024-10-20 22:46:27
Yang.Lian 发表于 2024-10-19 14:36
3.0.4 没有找到下载的地方,我直接去 gitee 下载了最新版的,gvar 改成 copy 了,整体改动不大,细节小调 ...
是啊 CosyOS-II V3.0.4 在哪啊,我也没找到首页中也没看到
Yang.Lian
发表于 2024-10-22 09:58:43
CosyOS 发表于 2024-10-18 20:06
好的,我思考下。
你可下载最新版试用。
历史版本中,如果未开启 任务管理器,
我突然意识到,有没有可能我在 定时中断上用了定时查询的设置时长的函数,导致这个了问题呢?或者反过来,在定时查询上使用了定时中断的函数?{:sweat:}
CosyOS
发表于 2024-10-22 10:13:26
Yang.Lian 发表于 2024-10-22 09:58
我突然意识到,有没有可能我在 定时中断上用了定时查询的设置时长的函数,导致这个了问题呢?或者反过来, ...
如果是这样,定时的目标就错了,检查一下。。。
CosyOS
发表于 2024-10-22 13:50:35
本帖最后由 CosyOS 于 2024-10-22 14:21 编辑
CosyOS - 如何最小化系统资源占用
这个问题,我们主要针对 STC8 等51核 提供解决方案。
首先,CosyOS for 8051,即支持 BL51,也支持 LX51。
如下图,不打钩为 BL51,打钩为 LX51。
数据是否覆盖(OVERLAY/NOOVERLAY)影响内存占用;
是否移除未使用,影响flash占用。
首先,我们还是应注重 系统配置文件、MCU配置文件,相应的裁剪工作,
不用的功能不启用。
方案一、NOOVERLAY + 手动移除未使用
1、首先,BL51 Misc / LX51 Misc 标签页 -> Misc controls,先去掉 NOOVERLAY;
2、而后,手动移除未使用:
编译,此时未调用的代码段编译器会告警 L16,
注释掉相关代码后再编译,重复这个过程直到没有告警 L16。
3、最后,再恢复 NOOVERLAY,可实现最大程度的裁剪。
方案二、OVERLAY + 手动移除未使用
该方案仅推荐在 BL51 下采用。
首先,BL51 Misc 标签页 -> Overlay,添加如下内容:
su_startup_task!*, // su_startup_task 不进行覆盖分析,否则会产生告警 L15
*!Starter, *!Sysidle, *!Taskmgr, *!Debugger, // 设置 所有系统任务 为 调用树的根
*!task_1, *!task_2 // 设置 所有用户任务 为 调用树的根
而后,手动移除未使用。
方案三、OVERLAY + 自动移除未使用
该方案仅支持 LX51。
LX51 Misc 标签页 -> Overlay,添加 方案二 中相同的内容;
Misc controls,添加控制命令 REMOVEUNUSED。
采用 方案二、方案三时,用户应反复核对 Overlay 中添加的内容,确保所有任务都设置为调用树的根。
对于STC32,推荐采用 Generate reentrant functions + REMOVEUNUSED,自动移除未使用。
对于ARM,自动移除未使用。
最后,CosyOS内核中,还有一处代码,是任何编译器都无法移除未使用的,
即 sv_int_pend_fifo.c 中的各个函数,为 中断挂起服务FIFO队列执行函数,
若要进一步裁剪,可逐个查看这些函数,确定不使用的,必须宏定义为空。
如 在中断中不会调用 iResumeTask(task) 来恢复任务,那么函数 _resume_task_ 是用不到的,
static void _resume_task_(void _STATIC_MEM_ *sv) MCUCFG_C51USING
此时,可注释掉该函数,并
#define _resume_task_ OS_NULL
--END--
sdwys
发表于 2024-10-23 00:01:34
系统代码能不能加点详细的注释,说明, 满屏的宏定义,不加点详细的注释,读代码都读晕了。想用在实际项目中,系统代码不理解还真不敢用,想短时间大体搞懂,没详细注释说明难啊。放下了,下次再想用又要重新熟悉。
sdwys
发表于 2024-10-23 23:54:07
sdwys 发表于 2024-10-23 00:01
系统代码能不能加点详细的注释,说明, 满屏的宏定义,不加点详细的注释,读代码都读晕了。想用在实际项目 ...
先把port_80251.h 和 os_redef.h 这两个文件好好注释一下吧,好多地方经过一层层的封装,vscode都定位不到到底是在哪里定义的。如基础的数据类型,在不同的地方又经过不同的封装,没有工具的帮助,你都不知道这到底定义了些什么,在什么地方定义的。太多的宏定义能把人绕晕,宏定义大写的单词与单词之间能不能加个下划线隔开,好区分一点。
sdwys
发表于 2024-10-25 22:49:01
/* 查询标志组 */
#define sTSV_QueryFlagGroup(group) \
( \
sizeof(group) == 1 ? *(s_u8_t*)&group ? true : false \
: sizeof(group) == 2 ? *(s_u16_t *)&group ? true : false \
: sizeof(group) == 4 ? *(s_u32_t *)&group ? true : false \
: false \
)
这段代码怎么理解,各个运算符之间怎么结合的,看了近半个小时,没搞懂,作者拆开分析一下吧。