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

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

 火... [复制链接]

5

主题

85

回帖

769

积分

高级会员

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

点评

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

使用道具 举报 送花

5

主题

1208

回帖

4820

积分

荣誉版主

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

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

使用道具 举报 送花

5

主题

85

回帖

769

积分

高级会员

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

点评

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

使用道具 举报 送花

5

主题

1208

回帖

4820

积分

荣誉版主

积分
4820
 楼主| 发表于 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 中启动自己的任务 或 执行一些需要缓期执行的初始化工作。



回复

使用道具 举报 送花

44

主题

242

回帖

4349

积分

论坛元老

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

点评

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

使用道具 举报 送花

5

主题

1208

回帖

4820

积分

荣誉版主

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

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

使用道具 举报 送花

44

主题

242

回帖

4349

积分

论坛元老

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

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

使用道具 举报 送花

4

主题

36

回帖

950

积分

高级会员

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

点评

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

使用道具 举报 送花

865

主题

1万

回帖

2万

积分

管理员

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

可以
回复

使用道具 举报 送花

44

主题

242

回帖

4349

积分

论坛元老

积分
4349
发表于 2024-11-21 09:52:35 | 显示全部楼层
向CosyOS成功迈出的第一步: 通过串口库助手观察任务管理器输出:
截图202411210942424516.jpg




首先从作者的gitee仓库拉取最新的没有测试case的纯净版本,防止其他因素影响;


然后按照作者文档中心 -> 开发流程 创建keil 工程(为了使用CosyOS 给mac电脑装了个win系统 {:5_318:});
接下来添加需要的代码:
1、在初始化钩子中添加初始化代码:
  1. /**************************************************************************//**
  2. * @item     CosyOS-II Hook
  3. * @file     init_hook.c
  4. * @brief    初始化钩子
  5. * @detail   在主函数中首先被调用,适用于初始化时钟、GPIO、寄存器等工作。
  6. * @author   迟凯峰
  7. * @version  V3.0.0
  8. * @date     2024.06.25
  9. ******************************************************************************/
  10. #include "..\System\os_link.h"
  11. void init_hook(void)
  12. {
  13.         #define BAUD  115200 // 串口波特率
  14.         #define TM2   (65536 - SYSCFG_SYSCLK / 4 / BAUD)
  15.         P0M0 = 0; P0M1 = 0;
  16.         P1M0 = 0; P1M1 = 0;
  17.         P2M0 = 0; P2M1 = 0;
  18.         P3M0 = 0; P3M1 = 0;
  19.         P4M0 = 0; P4M1 = 0;
  20.         P5M0 = 0; P5M1 = 0;
  21.         P6M0 = 0; P6M1 = 0;
  22.         P7M0 = 0; P7M1 = 0;
  23.        
  24.         AUXR  =        0x00;  // 允许访问内部xdata
  25.         P_SW2 =        EAXFR | 0x01; // xxxx xxxx = 1000 0000 允许访问扩展RAM区特殊功能寄存器, 我是用的是STCH试验箱,因此这里需要切换串口二的引脚;
  26.        
  27.         TMOD = 0x00;   // 定时器0、1、2、3、4为16位自动重装载模式
  28.         AUXR = 0x45;   // 定时器1、2为1T模式,  串口1用定时器2做波特率发生器
  29.         SCON = 0x40;   // 串口1工作模式为模式1
  30.         S2CON = 0x40;  // 串口2工作模式为模式0,串口2用定时器2做波特率发生器
  31.         P_SW1 = 0xC0;  // 串口1切换至P4.3/P4.4
  32.         TI = 1;        // 用于printf
  33.         /* 定时器2 */
  34.         T2L = (unsigned char)TM2;
  35.         T2H = (unsigned char)(TM2 >> 8);
  36.         AUXR|= T2R;
  37.         /* UART2中断优先级为1级 */
  38.         IP2H &=~PS2H;
  39.         IP2 |= PS2;
  40.         /* INT0中断优先级为0级 */
  41.         IPH &=~PX0H;
  42.         PX0 = 0;
  43.         /* 任务管理器 */
  44.         #if SYSCFG_DEBUGGING == 1
  45.         S2CON |= S2REN;
  46.         IE2 |= ES2;
  47.         #endif
  48. }
复制代码


2、在用户分组下新建.C 文件编写串口处理程序(直接copy 作者的)
  1. /**************************************************************************//**
  2. * @item     CosyOS-II User
  3. * @file     Taskmgr.c
  4. * @brief    CosyOS-II 任务管理器
  5. * @detail   当前配置为使用UART2,用户可自行调整。
  6.              正常情况下,下方代码中,您仅需调整:UART2_Isr、中断向量号、S2CON、S2TI、S2RI、S2BUF。
  7.              您需自行初始化串口、串口中断优先级、波特率等相关配置。
  8. * @author   迟凯峰
  9. * @version  V1.0.2
  10. * @date     2024.05.11
  11. ******************************************************************************/
  12. #include "..\System\os_link.h"
  13. #if SYSCFG_DEBUGGING == __ENABLED__
  14. void UART2_Isr(void) interrupt 8// using 3
  15. {
  16.         if(S2CON & S2TI){
  17.                 S2CON &= ~S2TI;
  18.                 if(*s_debug_sendptr){
  19.                         S2BUF = *s_debug_sendptr++;
  20.                 }
  21.                 else{
  22.                         iDebugSend;
  23.                 }
  24.         }
  25.         if(S2CON & S2RI){
  26.                 S2CON &= ~S2RI;
  27.                 if(s_debug_recvptr - s_debug_recvbuff < OS_DEBUGRECVBUFFSIZE - 1){
  28.                         *s_debug_recvptr++ = S2BUF;
  29.                 }
  30.                 iDebugRecv;
  31.         }
  32. }
  33. #endif
复制代码
由于使用了串口二,需要使用LINK1D的另一组串口,接线如下:

截图202411210951375783.jpg

效果如下:





点评

任务管理器相关命令: 开启任务管理器:taskmgr 退出任务管理器:exit 设置任务管理器更新速度:taskmgr /s=xxx xxx: 50~5000, 单位毫秒。 命令结尾要加 回车换行 \r\n 要靠串口助手自动加,而不是写到命令中。  详情 回复 发表于 2024-11-21 12:49
不争是争
回复

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2026-9-23 16:18 , Processed in 0.090982 second(s), 95 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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