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

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

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

5

主题

1152

回帖

4477

积分

荣誉版主

积分
4477
发表于 2024-8-30 21:26:26 | 显示全部楼层
王*** 发表于 2024-8-22 11:28
楼主有没有什么readme文件配合阅读,看不懂你这个宏定义对应的都是什么参数

task 是任务这个看懂

CosyOS-II API 用户参考手册.rar (1.56 MB, 下载次数: 368)

暂时先用这个吧,以后会出新版,合为一个说明文档。
回复 支持 反对

使用道具 举报 送花

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

5

主题

1152

回帖

4477

积分

荣誉版主

积分
4477
发表于 2024-8-30 21:35:27 | 显示全部楼层
王*** 发表于 2024-8-22 12:55
问,工程里面用了两个串口,UART1和UART2分别是用来做什么的。若是UART2是用来debug OS的那为什么不用UART1 ...

UART1 用做 用户的 printf,
UART2 用做 系统的 Taskmgr,
原因不多解释,总之分开好。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:51
  • 最近打卡:2025-04-14 00:31:51
已绑定手机

5

主题

43

回帖

355

积分

中级会员

积分
355
发表于 2024-9-1 18:08:51 | 显示全部楼层
本帖最后由 王锦平 于 2024-9-1 18:20 编辑
Cos*** 发表于 2024-8-30 21:17
启动你自己的任务,不要在 main()中,而是在 启动钩子 start_hook()中,
这样就会一切正常了。
你可以看一 ...

情况是这样的
  1. uCreateTask(task_2, 1, TEST_TASKSTACKSIZE, 0, 0)
  2. {
  3.         static unsigned int i = 0;
  4.         //uDelay_s(5);
  5.         P33 = 0;
  6.         P00 = 1;
  7.         printf("task_2: %u\r\n", ++i);
  8.         uEndTasking;
  9. }
  10. void start_hook(void)
  11. {
  12.     uStartTask_Ready(task_2);                                // 启动用户任务
  13.     GPIO_setOpenDrainOutput(3, 3);// P0
  14.     GPIO_setPushPullupOutput(0,0);
  15.     printf("start_hook\r\n");
  16.     P33 = 0;
  17.     P00 = 1;
  18. }
  19. int main(void)
  20. {
  21.         void s_init_timing(void);
  22.         #if SYSCFG_SAFERUNTIME == __ENABLED__
  23.         s_tid_t i;
  24.         for(i = 0; i < OS_TASKTOTAL + 1; i++){
  25.                 s_sign_timeout[i] = 0;
  26.         }
  27.         #endif
  28.         #if OS_TIMINTTOTAL || OS_TIMQRYTOTAL
  29.         s_init_timing();
  30.         #endif
  31.         init_hook();
  32.         printf("init hook ok\r\n");
  33.         mSys_INIT;
  34.         printf("init syscfg ok\r\n");
  35.         
  36.         
  37.         #if SYSCFG_DEBUGGING == __ENABLED__
  38.         sStartTask_TimQry(OS_TMID_TASKMGR);
  39.         #endif
  40.         uStartTask(Starter, OS_STATUS_READY);        // 启动任务
  41.         uStartTask(Sysidle, OS_STATUS_READY);        // 空闲任务
  42.         // 启动空闲任务后不会返回
  43.         while(true);
  44. }
复制代码

除了在 main() 里头以外,这两个函数里头我操作 IO_level 都没有成功,但是可以确定的是,在 start_hook() 里面操作 IO 模式是成功了的,因为在执行了
uStartTask(Starter, OS_STATUS_READY);

这之后我操作了 IO
        P33 = 0;
        P00 = 1;

灯亮了,但是在 start_hook() task_2() 这两个函数里头,操作 IO 都没有成功,因为灯没有亮
我甚至在 idle_hook() 里头也操作了 IO 但也没有成功


点评

会不会 在 task_2 中 点灯时,IO模式没有正确配置?IO模式是不是高阻输入(默认)? 看下测试程序,在各个任务中也经常会有IO输出,都是正常的。  详情 回复 发表于 2024-9-1 22:48
回复 支持 反对

使用道具 举报 送花

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

5

主题

1152

回帖

4477

积分

荣誉版主

积分
4477
发表于 2024-9-1 22:48:54 | 显示全部楼层
王*** 发表于 2024-9-1 18:08
情况是这样的

除了在 main() 里头以外,这两个函数里头我操作 IO_level 都没有成功,但是可以确定的是, ...

会不会 在 task_2 中 点灯时,IO模式没有正确配置?IO模式是不是高阻输入(默认)?
看下测试程序,在各个任务中也经常会有IO输出,都是正常的。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:51
  • 最近打卡:2025-04-14 00:31:51
已绑定手机

5

主题

43

回帖

355

积分

中级会员

积分
355
发表于 2024-9-2 00:22:36 | 显示全部楼层
Cos*** 发表于 2024-9-1 22:48
会不会 在 task_2 中 点灯时,IO模式没有正确配置?IO模式是不是高阻输入(默认)?
看下测试程序,在各 ...
  1. /**************************************************************************//**
  2. * @item     CosyOS-II Kernel
  3. * @file     os_main.c
  4. * @brief    主函数
  5. * @author   迟凯峰
  6. * @version  V3.0.0
  7. * @date     2024.06.25
  8. ******************************************************************************/
  9. #include "os_link.h"
  10. #include "stdio.h"
  11. #define TEST_TASKSTACKSIZE 64
  12. #define IO_M0_RESET (unsigned char)(0x00)
  13. #define IO_M1_RESET (unsigned char)(0x00)
  14. /// @brief 设置推挽输出
  15. /// @param port 端口
  16. /// @param pin 引脚
  17. void GPIO_setPushPullupOutput(const unsigned char port, const unsigned char pin)
  18. {
  19.     unsigned char fr_M0 = IO_M0_RESET;
  20.     unsigned char fr_M1 = IO_M1_RESET;
  21.     if ( port > 5 || pin > 7 )
  22.         return;
  23.     switch ( port ) // 根据 port读取不同的寄存器
  24.     {
  25.         case 0:
  26.             fr_M0 = P0M0;
  27.             fr_M1 = P0M1;
  28.             break;
  29.         case 1:
  30.             fr_M0 = P1M0;
  31.             fr_M1 = P1M1;
  32.             break;
  33.         case 2:
  34.             fr_M0 = P2M0;
  35.             fr_M1 = P2M1;
  36.             break;
  37.         case 3:
  38.             fr_M0 = P3M0;
  39.             fr_M1 = P3M1;
  40.             break;
  41.         case 4:
  42.             fr_M0 = P4M0;
  43.             fr_M1 = P4M1;
  44.             break;
  45.         case 5:
  46.             fr_M0 = P5M0;
  47.             fr_M1 = P5M1;
  48.             break;
  49.         default:
  50.             return;
  51.     }
  52.     BIT_SET_ONE(fr_M0, pin);
  53.     BIT_SET_ZERO(fr_M1, pin);
  54.     switch ( port ) // 根据 port读取不同的寄存器
  55.     {
  56.         case 0:
  57.             P0M0 = fr_M0;
  58.             P0M1 = fr_M1;
  59.             break;
  60.         case 1:
  61.             P1M0 = fr_M0;
  62.             P1M1 = fr_M1;
  63.             break;
  64.         case 2:
  65.             P2M0 = fr_M0;
  66.             P2M1 = fr_M1;
  67.             break;
  68.         case 3:
  69.             P3M0 = fr_M0;
  70.             P3M1 = fr_M1;
  71.             break;
  72.         case 4:
  73.             P4M0 = fr_M0;
  74.             P4M1 = fr_M1;
  75.             break;
  76.         case 5:
  77.             P5M0 = fr_M0;
  78.             P5M1 = fr_M1;
  79.             break;
  80.         default:
  81.             return;
  82.     }
  83.     return;
  84. }
  85. /// @brief 设置开漏输出
  86. /// @param port 端口
  87. /// @param pin 引脚
  88. void GPIO_setOpenDrainOutput(const unsigned char port, const unsigned char pin)
  89. {
  90.     unsigned char fr_M0 = IO_M0_RESET;
  91.     unsigned char fr_M1 = IO_M1_RESET;
  92.     if ( port > 5 || pin > 7 )
  93.         return;
  94.     switch ( port ) // 根据 port读取不同的寄存器
  95.     {
  96.         case 0:
  97.             fr_M0 = P0M0;
  98.             fr_M1 = P0M1;
  99.             break;
  100.         case 1:
  101.             fr_M0 = P1M0;
  102.             fr_M1 = P1M1;
  103.             break;
  104.         case 2:
  105.             fr_M0 = P2M0;
  106.             fr_M1 = P2M1;
  107.             break;
  108.         case 3:
  109.             fr_M0 = P3M0;
  110.             fr_M1 = P3M1;
  111.             break;
  112.         case 4:
  113.             fr_M0 = P4M0;
  114.             fr_M1 = P4M1;
  115.             break;
  116.         case 5:
  117.             fr_M0 = P5M0;
  118.             fr_M1 = P5M1;
  119.             break;
  120.         default:
  121.             return;
  122.     }
  123.     BIT_SET_ONE(fr_M0, pin);
  124.     BIT_SET_ONE(fr_M1, pin);
  125.     switch ( port ) // 根据 port读取不同的寄存器
  126.     {
  127.         case 0:
  128.             P0M0 = fr_M0;
  129.             P0M1 = fr_M1;
  130.             break;
  131.         case 1:
  132.             P1M0 = fr_M0;
  133.             P1M1 = fr_M1;
  134.             break;
  135.         case 2:
  136.             P2M0 = fr_M0;
  137.             P2M1 = fr_M1;
  138.             break;
  139.         case 3:
  140.             P3M0 = fr_M0;
  141.             P3M1 = fr_M1;
  142.             break;
  143.         case 4:
  144.             P4M0 = fr_M0;
  145.             P4M1 = fr_M1;
  146.             break;
  147.         case 5:
  148.             P5M0 = fr_M0;
  149.             P5M1 = fr_M1;
  150.             break;
  151.         default:
  152.             return;
  153.     }
  154.     return;
  155. }
  156. uCreateTask(task_2, 1, TEST_TASKSTACKSIZE, 0, 0)
  157. {
  158.         static unsigned int i = 0;
  159.         //uDelay_s(5);
  160.         P33 = 0;
  161.         P00 = 1;
  162.         printf("task_2: %u\r\n", ++i);
  163.         uEndTasking;
  164. }
  165. void set_IO(void)
  166. {
  167.     P33 = 0;
  168.         P00 = 1;
  169. }
  170. void start_hook(void)
  171. {
  172.     uStartTask_Ready(task_2);                                // 启动用户任务
  173.     GPIO_setOpenDrainOutput(3, 3);// P0
  174.         GPIO_setPushPullupOutput(0,0);
  175.     printf("start_hook\r\n");
  176.     set_IO();
  177. }
  178. int main(void)
  179. {
  180.         void s_init_timing(void);
  181.         #if SYSCFG_SAFERUNTIME == __ENABLED__
  182.         s_tid_t i;
  183.         for(i = 0; i < OS_TASKTOTAL + 1; i++){
  184.                 s_sign_timeout[i] = 0;
  185.         }
  186.         #endif
  187.         #if OS_TIMINTTOTAL || OS_TIMQRYTOTAL
  188.         s_init_timing();
  189.         #endif
  190.         init_hook();
  191.         printf("init hook ok\r\n");
  192.         mSys_INIT;
  193.         printf("init syscfg ok\r\n");
  194.        
  195.        
  196.         #if SYSCFG_DEBUGGING == __ENABLED__
  197.         sStartTask_TimQry(OS_TMID_TASKMGR);
  198.         #endif
  199.         uStartTask(Starter, OS_STATUS_READY);        // 启动任务
  200.         uStartTask(Sysidle, OS_STATUS_READY);        // 空闲任务
  201.         // 启动空闲任务后不会返回
  202.         while(true);
  203. }
复制代码

目前就这套测试代码,是根据你的STC8H的工程修改的
观测以下结果:
1、没有进入任务
2、启动 Sysidle 以后它没有返回,在 uStartTask(Sysidle, OS_STATUS_READY); 这句以后的代码都不会跑
3、start_hook() 内我修改 IO 模式是成功的,但是设置 IO_level 是不成功的

点评

那我建议你,在 init_hook() 中 设置 IO模式, 而后再分别在 start_hook、task_2 中 设置IO,看能否正常。 启动 Sysidle 后,就是不会返回 main 的,而是直接开始任务调度,就是这样设计的,这不是bug。 如果还是  详情 回复 发表于 2024-9-2 20:09
回复 支持 反对

使用道具 举报 送花

2

主题

14

回帖

125

积分

注册会员

积分
125
发表于 2024-9-2 17:19:35 | 显示全部楼层
今天在使用STC32G的cosyOS时遇到一个问题,在PendSV中断配置时,发现除了INT0的中断可以使用,其他的中断都会报这个错误。不知道是什么原因,求大佬解答。
截图202409021717113932.jpg
截图202409021717568483.jpg

点评

你需要在 port_80251s.s 文件中,定义 IE1。 [attachimg]55612[/attachimg] 参照 STC32G.H,把 IE1 添加至 "用户定义寄存器" 即可。 STC32G.H中,sbit IE1 = TCON^3; 这里应调整为 IE1 BIT TCON^3 替换掉  详情 回复 发表于 2024-9-2 19:46
回复 支持 反对

使用道具 举报 送花

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

5

主题

1152

回帖

4477

积分

荣誉版主

积分
4477
发表于 2024-9-2 19:46:27 | 显示全部楼层
etha*** 发表于 2024-9-2 17:19
今天在使用STC32G的cosyOS时遇到一个问题,在PendSV中断配置时,发现除了INT0的中断可以使用,其他的中断都 ...

你需要在 port_80251s.s 文件中,定义 IE1。
截图202409021935401635.jpg


参照 STC32G.H,把 IE1 添加至 "用户定义寄存器" 即可。
STC32G.H中,sbit IE1 = TCON^3;
这里应调整为 IE1     BIT     TCON^3
替换掉 行27,或添加至 行28.


回复 支持 反对

使用道具 举报 送花

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

5

主题

1152

回帖

4477

积分

荣誉版主

积分
4477
发表于 2024-9-2 20:09:43 | 显示全部楼层
本帖最后由 CosyOS 于 2024-9-2 20:40 编辑
王*** 发表于 2024-9-2 00:22
目前就这套测试代码,是根据你的STC8H的工程修改的
观测以下结果:
1、没有进入任务

那我建议你,在 init_hook() 中 设置 IO模式,
而后再分别在 start_hook、task_2 中 设置IO,看能否正常。

启动 Sysidle 后,就是不会返回 main 的,而是直接开始任务调度,就是这样设计的,这不是bug。

如果还是 不行,你可以发给我,我来查找原因。


我怀疑可能 设置IO模式 并未取得预期的效果。
你可以先用原始且简单的方式 设置一下 IO模式,试一试,如:

P0M0 = 0; P0M1 = 0;
P1M0 = 0; P1M1 = 0;

。。。
先所有IO都为准双向口试一试。


回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:51
  • 最近打卡:2025-04-14 00:31:51
已绑定手机

5

主题

43

回帖

355

积分

中级会员

积分
355
发表于 2024-9-3 20:45:58 | 显示全部楼层
Cos*** 发表于 2024-9-2 20:09
那我建议你,在 init_hook() 中 设置 IO模式,
而后再分别在 start_hook、task_2 中 设置IO,看能否正常。 ...

可以确认的是,设置 IO mode 可以取得预期效果,但设置 IO level 没有取得预期效果。

在此恳求楼主大大替我排查一下

这几个文件有动过
* syscfg.h
* init_hook.c
* Taskmgr.c
* os_link.h

CosyOS-II-STC8C-TEST-V3.0.1-20240903.7z

238.16 KB, 下载次数: 236

点评

我已测试,分别在 task_2 和 start_hook 中 设置IO P33 = 0; P00 = 1; P33的LED都能点亮。  详情 回复 发表于 2024-9-5 23:33
回复 支持 反对

使用道具 举报 送花

2

主题

14

回帖

125

积分

注册会员

积分
125
发表于 2024-9-4 23:07:34 | 显示全部楼层
本帖最后由 ethantlh 于 2024-9-5 11:51 编辑

今天使用STC32G的时候,发现自己创建的任务不会被启动,不知道什么原因。我尝试了放在TEXT的启动StartHOOK里,发现无法启动(但是模板自带的2个TASK都可以启动);放在StartHOOK.C的StartHOOK里也无法启动,不知道是什么原因。求大佬解答。
截图202409042247326392.jpg
截图202409042247358610.jpg

ethantlh_STC32G_CosyOS_Project.7z

820.15 KB, 下载次数: 246

点评

1、新增任务时,应注意 syscfg.h -> 任务设置,“用户任务总数”、“任务名称最大长度” 等参数。 [attachimg]55921[/attachimg] 2、应关注 系统配置 和 MCU配置,并做出适当调整。 你这次,有两个问题需要解决: 1  详情 回复 发表于 2024-9-5 23:29
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-6-17 16:57 , Processed in 0.142252 second(s), 108 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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