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

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

 火... [复制链接]
  • 打卡等级:以坛为家II
  • 打卡总天数:466
  • 最近打卡:2025-06-16 22:40:21

5

主题

1152

回帖

4475

积分

荣誉版主

积分
4475
发表于 2024-11-13 21:19:42 | 显示全部楼层
本帖最后由 CosyOS 于 2024-11-14 09:52 编辑

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


新版特性:
1、内核文件已加入大量注释,并支持 doxygen
2、部分结构体成员、服务函数形参和局部变量,重新命名,新名称更为科学、规范;
如:
htask:任务句柄
hmut:互斥信号量句柄
hbin:二值信号量句柄
hsem:计数信号量句柄
htbox:信箱句柄
hmbox:邮箱句柄
hque:队列句柄
hmem:线程内存句柄
。。。
3、重新封装了 定时中断/查询 的数据结构。
4、全局变量钩子 调整为 副本钩子 void copy_hook(void);。
5、中断中的全局变量读访问 有所调整:
/* 读哪一个全局变量?*/
#define iWhichGVar_Read          s_sign_updatecopy /** \return bool,true:读正本,false:读副本)*/

6、sv_int_pend_fifo.c 中,加入了 手动裁剪开关:
截图202411132027365493.jpg

如 恢复任务:
截图202411132028589570.jpg

7、系统配置文件中,加入了 Starter 创建模式:
截图202411132031312098.jpg

8、增加了 API 中断中触发 PendSV:
/*
* 触发PendSV
* 在用户中断中,当采用中断挂起服务FLAG队列执行服务时,
* 用户在设置标志位后需手动触发PendSV,而后在 pendsv_hook() 中执行服务。
*/

#define iPendSV_Set  mPendSV_Set



专业版测试程序的调整:
1、完善了 事件标志组 测试例程。
2、邮箱测试例程中,当传输指针时:
     如果邮件的数据类型为非原子访问类型,应酌情考虑“写邮件”“读邮件”之间的互斥访问问题。
     关于这个问题,已调整了相关代码和注释。

其实,消息队列也同样存在这个问题,当传输指针时:
如果消息的数据类型为非原子访问类型、非 常量,也应考虑“写消息”“读消息”之间的互斥访问问题。
对于 “发送邮件”“接收邮件”之间、“发送消息”“接收消息”之间,它们的互斥访问是由 OS内核服务 保证的,用户无需多虑。
同理,这个问题对于其它 RTOS 来说可能也同样存在,用户应予以重视!


3、增加了 全局变量访问示例:
截图202411132050265453.jpg
示例中包括了非原子访问全局变量、全局数组、全局字符串,
分别在 任务、滴答、中断,中的,读访问、写访问、自运算;
针对全局变量自运算,还分别给出了
挂起服务调用 iPendSVC(fp)挂起服务钩子 pendsv_hook
两种方案的应用示例,是非常全面的。

注意:该示例程序不能进行编译测试,
当编译 Test 中的测试例程时,最好是移除该文件,
否则 C251会有警告,MDK 会消耗 你的电脑的CPU使用率。



稍后,将会在顶楼发布最新版测试例程。






回复 支持 2 反对 0

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:9
  • 最近打卡:2025-06-09 09:28:28

2

主题

56

回帖

540

积分

高级会员

积分
540
发表于 2024-11-14 09:16:27 | 显示全部楼层
V3.1的发布又向完美迈进了一步,感谢作者的付出与努力,为作者点赞。

点评

未来,还会进一步增强注释,逐步完善。 首先就是 ur_api.h,加入中文注释,支持 doxygen,使其 直接就是 说明书。 因为对于用户来说,API说明书是至关重要的。  详情 回复 发表于 2024-11-14 09:30
回复 支持 反对

使用道具 举报 送花

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

5

主题

1152

回帖

4475

积分

荣誉版主

积分
4475
发表于 2024-11-14 09:30:53 | 显示全部楼层
sdw*** 发表于 2024-11-14 09:16
V3.1的发布又向完美迈进了一步,感谢作者的付出与努力,为作者点赞。

未来,还会进一步增强注释,逐步完善。
首先就是 ur_api.h,加入中文注释,支持 doxygen,使其 直接就是 说明书。
因为对于用户来说,API说明书是至关重要的。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:9
  • 最近打卡:2025-06-09 09:28:28

2

主题

56

回帖

540

积分

高级会员

积分
540
发表于 2024-11-15 17:01:18 | 显示全部楼层
今天调试跟踪了一下午,想看看从MCU上电到启动系统之间都做了些什么工作,可能对251汇编不大熟悉把自己都搞懵了,作者能否给讲一下,从上电到进入系统,由系统接管后开始调度都做了那些工作。

点评

可以通过仿真来查看整个启动过程。 首先是启动文件: 设备上电初始化后,从 绝对代码段 地址0 开始执行。 [attachimg]63947[/attachimg] 行148:这里是一条跳转指令,LJMP 到 STARTUP1(行154); ↓ 行154:初始化  详情 回复 发表于 2024-11-15 20:40
回复 支持 反对

使用道具 举报 送花

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

5

主题

1152

回帖

4475

积分

荣誉版主

积分
4475
发表于 2024-11-15 20:40:01 | 显示全部楼层
本帖最后由 CosyOS 于 2024-11-15 20:59 编辑
sdw*** 发表于 2024-11-15 17:01
今天调试跟踪了一下午,想看看从MCU上电到启动系统之间都做了些什么工作,可能对251汇编不大熟悉把自己都搞 ...

可以通过仿真来查看整个启动过程。

首先是启动文件:
设备上电初始化后,从 绝对代码段 地址
0 开始执行。
截图202411151931164947.jpg
行151:这里是一条跳转指令,LJMP 到 STARTUP1(行154);

行154:初始化 DPXL;

行157~162:EDATA清零;

行166~175:HDATA清零;

如果是MSP模式,执行 行179:栈指针指向 #?STACK-1,即编译后 EDATA空闲区首地址 -1;
如果是PSP模式,执行 行181:栈指针指向 EDATA 最后 512;

行185:跳转到 main()。

下面是 main() 函数:
截图202411151953172126.jpg
行24~27:如果安全运行时使能,清零所有超时信号;

行30:初始化 定时中断/查询,
          这其实是一个装载的过程,所有定时中断/查询在创建时都会定义一个控制块,
          在此把它们的控制块指针 装载到 指针数组中,即 定时中断/查询句柄;
s_timinthand_tsp   s_timint_handle[OS_TIMINTTOTAL];    /*!< 定时中断句柄 */
s_timqryhand_tsp   s_timqry_handle[OS_TIMQRYTOTAL];    /*!< 定时查询句柄 */

行32:调用初始化钩子,进行用户的初始化工作;

行33:系统初始化,即 OS的初始化,那它又做了什么呢?
截图202411151957434989.jpg
首先是 初始化内存池;
而后是 初始化定时器0 启动定时器0 开启 定时器0 和 PendSV 中断 开启总中断;

// 这里有一个很重要的问题,就是必须先进行用户初始化,而后再系统初始化;
否则,就容易出问题了。。。


行34:启动 Starter;

行35:启动 Sysidle;
          在 PendSV中断中,当 系统空闲任务 加入到 任务队列 后,系统将自动开启任务调度,
          而首个被调度运行的任务当然是 Starter。
截图202411152011571001.jpg

Starte运行后,
截图202411152028454467.jpg
首先是启动所有定时查询任务;

而后是启动所有定时中断任务;

最后是调用 start_hook,至此,控制权正式转交到用户手中。

用户可在 start_hook 中启动自己的任务 或 执行一些需要缓期执行的初始化工作。



回复 支持 1 反对 0

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:511
  • 最近打卡:2025-06-17 10:39:32

46

主题

232

回帖

3093

积分

论坛元老

积分
3093
发表于 2024-11-16 13:36:33 | 显示全部楼层
老师,有最新版相关的视频教程不? 我开始跟着视频学习,下载的最新版,结果编译失败。 想学最新版的。

点评

那没有哦。 其实这个事不用纠结, 你先跟着视频学习,懂了原理之后,就可以用最新版,自己修改、调整了。 或跟着视频同步操作的话,就用当时提供的课程资料。 道理都是一样的,无论新版、旧版,都不影响你的学习,又  详情 回复 发表于 2024-11-16 13:49
不争是争
回复 支持 反对

使用道具 举报 送花

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

5

主题

1152

回帖

4475

积分

荣誉版主

积分
4475
发表于 2024-11-16 13:49:55 | 显示全部楼层
大*** 发表于 2024-11-16 13:36
老师,有最新版相关的视频教程不? 我开始跟着视频学习,下载的最新版,结果编译失败。 想学最新版的。  ...

那没有哦。
其实这个事不用纠结,
你先跟着视频学习,懂了原理之后,就可以用最新版,自己修改、调整了。
或跟着视频同步操作的话,就用当时提供的课程资料。
道理都是一样的,无论新版、旧版,都不影响你的学习,又不是做产品。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:511
  • 最近打卡:2025-06-17 10:39:32

46

主题

232

回帖

3093

积分

论坛元老

积分
3093
发表于 2024-11-16 13:51:55 | 显示全部楼层
Cos*** 发表于 2024-11-16 13:49
那没有哦。
其实这个事不用纠结,
你先跟着视频学习,懂了原理之后,就可以用最新版,自己修改、调整了。 ...

好的, 感谢老师的回复 {:5_332:}
不争是争
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:347
  • 最近打卡:2025-06-17 08:58:27

0

主题

28

回帖

593

积分

高级会员

积分
593
发表于 2024-11-19 10:21:57 | 显示全部楼层
CosyOS-II-STC8H和CosyOS-II-STC32G是不是可以直接使用于Ai8051单片机?

点评

可以  详情 回复 发表于 2024-11-19 10:26
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:100
  • 最近打卡:2025-06-17 08:13:13

733

主题

1万

回帖

1万

积分

管理员

积分
16661
发表于 2024-11-19 10:26:32 | 显示全部楼层
stc-x*** 发表于 2024-11-19 10:21
CosyOS-II-STC8H和CosyOS-II-STC32G是不是可以直接使用于Ai8051单片机?

可以
回复 支持 1 反对 0

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-6-17 11:36 , Processed in 0.176835 second(s), 108 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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