找回密码
 立即注册
楼主: CosyOS

全局不关总中断的 RTOS,CosyOS-III-V1.2.0, 送 擎天柱-AI8051U转89C52核心板

 火... [复制链接]
  • 打卡等级:偶尔看看I
  • 打卡总天数:13
  • 最近打卡:2025-03-28 10:25:35

4

主题

74

回帖

542

积分

高级会员

积分
542
发表于 2024-10-18 11:23:15 | 显示全部楼层
Cos*** 发表于 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秒间隔执行下去

点评

好的,我思考下。 你可下载最新版试用。 历史版本中,如果未开启 任务管理器, 用户创建的定时查询,ID最大的那个,如果是任务,则不能启动。 新版本中已经修正。  详情 回复 发表于 2024-10-18 20:06
希望这个世界让我装一次B
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:432
  • 最近打卡:2025-05-01 16:19:56

5

主题

1127

回帖

4263

积分

荣誉版主

积分
4263
发表于 2024-10-18 20:06:23 | 显示全部楼层
Yang.*** 发表于 2024-10-18 11:23
先说明,以下我说的都 定时查询初始化状态 设置为 查询状态

后来,我看了一下代码,我意识到,可能是你 ...

好的,我思考下。
你可下载最新版试用。
历史版本中,如果未开启 任务管理器,
用户创建的定时查询,ID最大的那个,如果是任务,则不能启动。
新版本中已经修正。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:13
  • 最近打卡:2025-03-28 10:25:35

4

主题

74

回帖

542

积分

高级会员

积分
542
发表于 2024-10-19 14:36:53 | 显示全部楼层
Cos*** 发表于 2024-10-18 20:06
好的,我思考下。
你可下载最新版试用。
历史版本中,如果未开启 任务管理器,

3.0.4 没有找到下载的地方,我直接去 gitee 下载了最新版的,gvar 改成 copy 了,整体改动不大,细节小调
希望这个世界让我装一次B
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:11
  • 最近打卡:2025-03-02 22:40:36

3

主题

13

回帖

167

积分

注册会员

积分
167
发表于 2024-10-20 22:46:27 | 显示全部楼层
Yang.*** 发表于 2024-10-19 14:36
3.0.4 没有找到下载的地方,我直接去 gitee 下载了最新版的,gvar 改成 copy 了,整体改动不大,细节小调 ...

是啊 CosyOS-II V3.0.4 在哪啊,我也没找到  首页中也没看到

点评

过些天将提供最新版及测试程序下载。  发表于 2024-10-22 11:26
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:13
  • 最近打卡:2025-03-28 10:25:35

4

主题

74

回帖

542

积分

高级会员

积分
542
发表于 2024-10-22 09:58:43 | 显示全部楼层
Cos*** 发表于 2024-10-18 20:06
好的,我思考下。
你可下载最新版试用。
历史版本中,如果未开启 任务管理器,

我突然意识到,有没有可能我在 定时中断上用了定时查询的设置时长的函数,导致这个了问题呢?或者反过来,在定时查询上使用了定时中断的函数?

点评

如果是这样,定时的目标就错了,检查一下。。。  详情 回复 发表于 2024-10-22 10:13
希望这个世界让我装一次B
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:432
  • 最近打卡:2025-05-01 16:19:56

5

主题

1127

回帖

4263

积分

荣誉版主

积分
4263
发表于 2024-10-22 10:13:26 | 显示全部楼层
Yang.*** 发表于 2024-10-22 09:58
我突然意识到,有没有可能我在 定时中断上用了定时查询的设置时长的函数,导致这个了问题呢?或者反过来, ...

如果是这样,定时的目标就错了,检查一下。。。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:432
  • 最近打卡:2025-05-01 16:19:56

5

主题

1127

回帖

4263

积分

荣誉版主

积分
4263
发表于 2024-10-22 13:50:35 | 显示全部楼层
本帖最后由 CosyOS 于 2024-10-22 14:21 编辑

CosyOS - 如何最小化系统资源占用
这个问题,我们主要针对 STC8 等51核 提供解决方案。

首先,CosyOS for 8051,即支持 BL51,也支持 LX51
如下图,不打钩为 BL51,打钩为 LX51。

001.png

数据是否覆盖(OVERLAY/NOOVERLAY)影响内存占用;
是否移除未使用,影响flash占用。

首先,我们还是应注重 系统配置文件、MCU配置文件,相应的裁剪工作,
不用的功能不启用。

方案一、NOOVERLAY + 手动移除未使用
1、首先,BL51 Misc / LX51 Misc 标签页 -> Misc controls,先去掉 NOOVERLAY;
2、而后,手动移除未使用:
编译,此时未调用的代码段编译器会告警 L16,

002.png
注释掉相关代码后再编译,重复这个过程直到没有告警 L16。
3、最后,再恢复 NOOVERLAY,可实现最大程度的裁剪。

方案二、OVERLAY + 手动移除未使用
该方案仅推荐在 BL51 下采用。
首先,BL51 Misc 标签页 -> Overlay,添加如下内容:
su_startup_task!*,                                     // su_startup_task 不进行覆盖分析,否则会产生告警 L15
*!Starter, *!Sysidle, *!Taskmgr, *!Debugger, // 设置 所有系统任务 为 调用树的根
*!task_1, *!task_2                                    // 设置 所有用户任务 为 调用树的根

003.png
而后,手动移除未使用。

方案三、OVERLAY + 自动移除未使用
该方案仅支持 LX51
LX51 Misc 标签页 -> Overlay,添加 方案二 中相同的内容;
Misc controls,添加控制命令 REMOVEUNUSED。

004.png

采用 方案二、方案三时,用户应反复核对 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--




回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:2
  • 最近打卡:2025-04-08 10:41:18

2

主题

45

回帖

440

积分

中级会员

积分
440
发表于 2024-10-23 00:01:34 | 显示全部楼层
系统代码能不能加点详细的注释,说明, 满屏的宏定义,不加点详细的注释,读代码都读晕了。想用在实际项目中,系统代码不理解还真不敢用,想短时间大体搞懂,没详细注释说明难啊。放下了,下次再想用又要重新熟悉。

点评

好的,下一步我将尽可能的增加丰富的注释。  发表于 2024-10-23 17:50
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:2
  • 最近打卡:2025-04-08 10:41:18

2

主题

45

回帖

440

积分

中级会员

积分
440
发表于 2024-10-23 23:54:07 | 显示全部楼层
sdw*** 发表于 2024-10-23 00:01
系统代码能不能加点详细的注释,说明, 满屏的宏定义,不加点详细的注释,读代码都读晕了。想用在实际项目 ...

先把port_80251.h 和 os_redef.h 这两个文件好好注释一下吧,好多地方经过一层层的封装,vscode都定位不到到底是在哪里定义的。如基础的数据类型,在不同的地方又经过不同的封装,没有工具的帮助,你都不知道这到底定义了些什么,在什么地方定义的。太多的宏定义能把人绕晕,宏定义大写的单词与单词之间能不能加个下划线隔开,好区分一点。

点评

你也可以加我QQ,有问题随时沟通。工程模板中,有各种常用服务的应用示例,可参考或测试。  发表于 2024-10-24 13:00
好的,我会有计划的增加注释。你可以每个文件都看一看,了解每个文件的主要功能,有助于整体把握。  发表于 2024-10-24 00:06
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:2
  • 最近打卡:2025-04-08 10:41:18

2

主题

45

回帖

440

积分

中级会员

积分
440
发表于 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 \
)
这段代码怎么理解,各个运算符之间怎么结合的,看了近半个小时,没搞懂,作者拆开分析一下吧。

点评

#define sTSV_QueryFlagGroup(group) \ ( \ sizeof(group) == 1 ? *(s_u8_t *)&group ? true : false \ : sizeof(group) == 2 ? *(s_u16_t *)&group ? true : false \ : sizeof(group) =  详情 回复 发表于 2024-10-26 00:43
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-2 06:41 , Processed in 0.141975 second(s), 115 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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