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

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

 火... [复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:9
  • 最近打卡:2024-09-13 12:01:35

0

主题

25

回帖

102

积分

注册会员

积分
102
发表于 2024-9-13 14:07:40 | 显示全部楼层
有没有录播呢?
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:255
  • 最近打卡:2025-06-14 07:50:25
已绑定手机

0

主题

22

回帖

215

积分

中级会员

积分
215
发表于 2024-9-15 16:53:24 | 显示全部楼层
支持大神原创,助力STC32位8051腾飞!
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看II
  • 打卡总天数:25
  • 最近打卡:2024-09-24 08:48:14

1

主题

84

回帖

273

积分

中级会员

积分
273
发表于 2024-9-19 09:30:10 | 显示全部楼层
很不错,收藏学习
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:209
  • 最近打卡:2025-06-17 09:23:08

2

主题

19

回帖

166

积分

注册会员

积分
166
发表于 2024-9-21 09:46:12 | 显示全部楼层
还没玩过RTOS, 期待
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:30
  • 最近打卡:2025-06-17 08:57:16

4

主题

78

回帖

654

积分

高级会员

积分
654
发表于 2024-10-2 12:00:53 | 显示全部楼层
楼主,
我觉得定时查询的行为有点诡异,是我哪里搞错了?
我用定时器记录电压变化,
如果我在 start_hook 里面设置时间,无论时间设置多长,开机后1秒内大概被触发11次左右,大概记录了11次数据读取,然后恢复正常,按定时器设定时间读取
如果我在 init_hook 里面设置时间,定时查询触发都是正常的,但是第0秒并不会有触发任何动作

点评

首先,我猜测你的 用户定时查询初始化状态 设置为 查询状态,=> #define SYSCFG_USERTIMQRYINIT 1 且该 定时查询 已开启 自动重装载。 定时中断/查询任务 都是在 Starter 中启动的,而后是调用 start_hook。 而  详情 回复 发表于 2024-10-14 08:55
如果我在 init_hook 里面设置时间,定时查询触发都是正常的,但是第0秒并不会有触发任何动作 这可能与 syscfg.h 中,定时中断/查询设置,用户定时查询初始化状态 有关。 如果我在 start_hook 里面设置时间,无论时  详情 回复 发表于 2024-10-10 16:39
希望这个世界让我装一次B
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:466
  • 最近打卡:2025-06-16 22:40:21

5

主题

1152

回帖

4475

积分

荣誉版主

积分
4475
发表于 2024-10-10 16:39:17 | 显示全部楼层
Yang.*** 发表于 2024-10-2 12:00
楼主,
我觉得定时查询的行为有点诡异,是我哪里搞错了?
我用定时器记录电压变化,

如果我在 init_hook 里面设置时间,定时查询触发都是正常的,但是第0秒并不会有触发任何动作
这可能与 syscfg.h 中,定时中断/查询设置,用户定时查询初始化状态 有关。

如果我在 start_hook 里面设置时间,无论时间设置多长,开机后1秒内大概被触发11次左右,大概记录了11次数据读取,然后恢复正常,按定时器设定时间读取
这个我现在也想不到原因,代码能否发上来,方便分析研究?
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:466
  • 最近打卡:2025-06-16 22:40:21

5

主题

1152

回帖

4475

积分

荣誉版主

积分
4475
发表于 2024-10-13 21:48:26 | 显示全部楼层
本帖最后由 CosyOS 于 2024-10-15 00:21 编辑

CosyOS-II 最新版 V3.0.4 发布!


最新版本解决了 定时查询 不能为一个,至少要两个的问题。
历史版本中,如果未开启 任务管理器,用户创建的 定时查询 至少要两个,
否则相应任务或钩子不能运行,这个问题是由一个bug导致的,在最新版中得以修正。
CosyOS-II V3.0.4 版本开始,无论是否开启 任务管理器,
用户创建的 定时中断定时查询,至少都可为一个(当然也可为0)。

另外需要注意的就是,syscfg.h 中,用户定时中断总数用户定时查询总数
如果定义数量大于实际数量,编译器会告警;如果定义数量小于实际数量,编译器无法察觉。

所以,为防止定义出错,定义的数量可以先大一些,让编译器告警,
再逐渐减小,直到编译器没有告警。
当然,仔细统计一下实际的数量再设定正确的值,是最为直接有效的。



回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:466
  • 最近打卡:2025-06-16 22:40:21

5

主题

1152

回帖

4475

积分

荣誉版主

积分
4475
发表于 2024-10-14 08:55:39 | 显示全部楼层
本帖最后由 CosyOS 于 2024-10-14 08:57 编辑
Yang.*** 发表于 2024-10-2 12:00
楼主,
我觉得定时查询的行为有点诡异,是我哪里搞错了?
我用定时器记录电压变化,


首先,我猜测你的
用户定时查询初始化状态 设置为 查询状态,=> #define SYSCFG_USERTIMQRYINIT    1
且该 定时查询 已开启 自动重装载

定时中断/查询任务 都是在 Starter 中启动的,而后是调用 start_hook。
而在 main() 中,是先 s_init_timing()、再 init_hook(),而后是启动 Starter、调度 Starter。

1、如果在 init_hook 中定时,
     此时该定时任务还未启动,所以该定时任务启动后,首次便会按照用户的定时来运行;

2、如果在 start_hook 中定时,
     此时该定时任务已经启动,并且该定时器早已初始化为0,在 s_init_timing() 中,

        for(i = 0; i < OS_TIMQRYTOTAL; i++){
                s_timqry_loader = (s_timqry_t)(SYSCFG_USERTIMQRYINIT - 1);
                s_timqry_reload = (s_timqry_t)(SYSCFG_USERTIMQRYINIT - 1);
        }

所以在你定时操作之前,该任务早已运行,由于已经开启自动重装载,所以该任务每被恢复一次后又
重新定时为0,所以该任务在你定时之前已运行 n 次。

结论:
1、如果 定时查询初始化状态 设置为 查询状态,所有 定时查询 都应在 init_hook 中进行 初始定时。
2、如果 定时查询初始化状态 设置为 停止状态,所有 定时查询 都可在 任意位置    进行 初始定时。
3、对于 定时中断初始化状态 固定为 停止状态,所有 定时中断 都可在 任意位置    进行 初始定时。



回复 支持 1 反对 0

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:466
  • 最近打卡:2025-06-16 22:40:21

5

主题

1152

回帖

4475

积分

荣誉版主

积分
4475
发表于 2024-10-14 09:03:20 | 显示全部楼层
定时中断/查询 详解

定时中断:

1、定时中断初始化状态 固定为 停止状态

               时间到后
定时操作 ————> 定时中断任务/钩子


先进行定时操作,待时间到后,调度/调用 定时中断任务/钩子。
定时中断是仅   时间关键。


定时查询:

1、定时查询初始化状态 设置为 停止状态

               时间到后                 事件为真
定时操作 ————> 查询事件 ————> 定时查询任务/钩子


先进行定时操作,待时间到后,查询事件,若事件为真,调度/调用 定时查询任务/钩子。
其实就是,每次运行的条件都是先时间关键,再事件关键。


2、定时查询初始化状态 设置为 查询状态

               事件为真
查询事件 ————> 定时查询任务/钩子
      ↑                             ↓
      └───────── 定时操作
               时间到后


用法1、系统初始化后,已经开始查询用户定义的事件了,若事件为真,调度/调用 定时查询任务/钩子,
而后关联触发定时操作,待时间到后,再查询事件,若事件为真,再 调度/调用 定时查询任务/钩子。
注意,此用法,用户无需对定时器进行 初始定时。
其实就是,首次运行的条件是仅事件关键,无时间关键。

用法2、在 init_hook 中进行 初始定时,待时间到后,再查询事件... ...
此时,便等效于 定时查询初始化状态 为 停止状态。








回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:202
  • 最近打卡:2025-04-29 08:30:00

0

主题

47

回帖

304

积分

中级会员

积分
304
发表于 2024-10-16 09:05:13 | 显示全部楼层
非常方便
回复

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-6-17 11:32 , Processed in 0.164449 second(s), 115 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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