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

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

 火... [复制链接]
  • 打卡等级:偶尔看看III
  • 打卡总天数:51
  • 最近打卡:2025-04-14 00:31:51
已绑定手机

5

主题

43

回帖

355

积分

中级会员

积分
355
发表于 2024-9-5 08:20:21 | 显示全部楼层
etha*** 发表于 2024-9-4 23:07
今天使用STC32G的时候,发现自己创建的任务不会被启动,不知道什么原因。我尝试了放在TEXT的启动StartHOOK ...

怎的你移植了以后也无法启动任务
回复 支持 反对

使用道具 举报 送花

2

主题

14

回帖

125

积分

注册会员

积分
125
发表于 2024-9-5 08:43:42 | 显示全部楼层
王*** 发表于 2024-9-5 08:20
怎的你移植了以后也无法启动任务

对,还找了半天原因,确实没找到。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:472
  • 最近打卡:2025-06-27 16:25:11

5

主题

1154

回帖

4509

积分

荣誉版主

积分
4509
发表于 2024-9-5 23:29:14 | 显示全部楼层
本帖最后由 CosyOS 于 2024-9-5 23:33 编辑
etha*** 发表于 2024-9-4 23:07
今天使用STC32G的时候,发现自己创建的任务不会被启动,不知道什么原因。我尝试了放在TEXT的启动StartHOOK ...

1、新增任务时,应注意 syscfg.h -> 任务设置,“用户任务总数”、“任务名称最大长度” 等参数。
截图202409052319103398.jpg
2、应时常关注 系统配置 和 MCU配置,并做出适当调整。

你这次,有两个问题需要解决:
1、task3、LedShow_Task,任务栈太小了,因为当前是PSP模式,你可先设置大一些,以后再减小。
如:
uCreateTask(Task3,2,192,0,0);
uCreateTask(LedShow_Task,3,192,0,0);
2、LedShow_Task 名称有点长,可以短一些,或重新设置 “任务名称最大长度”。

截图202409052325116191.jpg

截图202409052328175340.jpg


回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:472
  • 最近打卡:2025-06-27 16:25:11

5

主题

1154

回帖

4509

积分

荣誉版主

积分
4509
发表于 2024-9-5 23:33:12 | 显示全部楼层
王*** 发表于 2024-9-3 20:45
可以确认的是,设置 IO mode 可以取得预期效果,但设置 IO level 没有取得预期效果。

在此恳求楼主大大 ...

我已测试,分别在 task_2 和 start_hook 中 设置IO P33 = 0; P00 = 1;
P33的LED都能点亮。
回复 支持 反对

使用道具 举报 送花

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

5

主题

43

回帖

355

积分

中级会员

积分
355
发表于 2024-9-6 05:08:04 | 显示全部楼层
Cos*** 发表于 2024-9-5 23:33
我已测试,分别在 task_2 和 start_hook 中 设置IO P33 = 0; P00 = 1;
P33的LED都能点亮。
...

我这里确实是没有将IO操作成功
原理图是这样的 https://github.com/PING020903/led12x12x4/tree/main

如图,现在效果是这样的。
当前代码是这样的
  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. uCreateTask(task_2, 1, TEST_TASKSTACKSIZE, 0, 0)
  13. {
  14.         static unsigned int i = 0;
  15.         //uDelay_s(5);
  16.         P33 = 1;
  17.         P00 = 0;
  18.         printf("task_2: %u\r\n", ++i);
  19.         uEndTasking;
  20. }
  21. void set_IO(void)
  22. {
  23.     P33 = 0;
  24.     P00 = 1;
  25. }
  26. void start_hook(void)
  27. {
  28.     set_IO();
  29.     uStartTask_Ready(task_2);                                // 启动用户任务
  30.    
  31.     printf("start_hook\r\n");
  32.    
  33. }
  34. int main(void)
  35. {
  36.         void s_init_timing(void);
  37.         #if SYSCFG_SAFERUNTIME == __ENABLED__
  38.         s_tid_t i;
  39.         for(i = 0; i < OS_TASKTOTAL + 1; i++){
  40.                 s_sign_timeout[i] = 0;
  41.         }
  42.         #endif
  43.         #if OS_TIMINTTOTAL || OS_TIMQRYTOTAL
  44.         s_init_timing();
  45.         #endif
  46.         init_hook();
  47.         printf("init hook ok\r\n");
  48.         mSys_INIT;
  49.         printf("init syscfg ok\r\n");
  50.    
  51.        
  52.        
  53.         #if SYSCFG_DEBUGGING == __ENABLED__
  54.         sStartTask_TimQry(OS_TMID_TASKMGR);
  55.         #endif
  56.         set_IO();
  57.         uStartTask(Starter, OS_STATUS_READY);        // 启动任务
  58.         uStartTask(Sysidle, OS_STATUS_READY);        // 空闲任务
  59.         // 启动空闲任务后不会返回
  60.         while(true);
  61. }
复制代码
如果正常进入了任务的话,那么亮起的LED都不会亮起

当前效果

当前效果

点评

我看了你的图纸, LED共24行、24列; 24行,分别为 P1~P24; 24列,分别为 P1~P24,并用 P0 替换 同名行; 如果 行为高电平,列为低电平,对应LED点亮。 如果 P33 = 0; P00 = 1; 也就是 “P0” = 0;“P1” = 1;=>  详情 回复 发表于 2024-9-7 01:38
回复 支持 反对

使用道具 举报 送花

2

主题

14

回帖

125

积分

注册会员

积分
125
发表于 2024-9-6 08:43:16 | 显示全部楼层
Cos*** 发表于 2024-9-5 23:29
1、新增任务时,应注意 syscfg.h -> 任务设置,“用户任务总数”、“任务名称最大长度” 等参数。

2、应 ...

感谢大佬!
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:472
  • 最近打卡:2025-06-27 16:25:11

5

主题

1154

回帖

4509

积分

荣誉版主

积分
4509
发表于 2024-9-7 01:38:07 | 显示全部楼层
本帖最后由 CosyOS 于 2024-9-7 01:41 编辑
王*** 发表于 2024-9-6 05:08
我这里确实是没有将IO操作成功
原理图是这样的 https://github.com/PING020903/led12x12x4/tree/main

我看了你的图纸,
LED共24行、24列;
24行,分别为 P1~P24;
24列,分别为 P1~P24,并用 P0 替换 同名行;
如果 行为高电平,列为低电平,对应LED点亮。

如果 P33 = 0; P00 = 1; 也就是 “P0” = 0;“P1” = 1;=> D1 点亮;
如果 P33 = 1; P00 = 0; 也就是 “P0” = 1;“P1” = 0;=> 此时由于 “P0” 未做为行,所以 task_2 中不会有LED点亮。

不知是否是由于你的疏忽,task_2 中写错了 0 or 1?
回复 支持 反对

使用道具 举报 送花

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

5

主题

43

回帖

355

积分

中级会员

积分
355
发表于 2024-9-7 03:36:06 | 显示全部楼层
本帖最后由 王锦平 于 2024-9-7 03:43 编辑
Cos*** 发表于 2024-9-7 01:38
我看了你的图纸,
LED共24行、24列;
24行,分别为 P1~P24;

并不是我疏忽,而是我尝试想要在 task_2 中关闭LED,如我上贴中的照片所示,实际效果是LED仍然亮起
正常来说,LED确实应该只会闪一下就不亮起了,故此我一直说没有正常进入任务

点评

大家也都注意下!  详情 回复 发表于 2024-9-8 02:47
哦,原来是这样,那证明 task_2 确实没有正常运行。 我也看不出问题出在哪里, 建议开启 任务管理器 辅助判断问题出在哪里。 我已用 STC8H8K64U 按照你的方法进行了测试,task_2 可正常运行、LED也正常。 [attachim  详情 回复 发表于 2024-9-8 02:36
回复 支持 反对

使用道具 举报 送花

2

主题

14

回帖

125

积分

注册会员

积分
125
发表于 2024-9-7 10:29:12 | 显示全部楼层
本帖最后由 ethantlh 于 2024-9-7 10:32 编辑

今天使用库函数的时候发现CosyOS例程里的库函数可能因为比较早的缘故,里面PWM部分的PWMx_BKR写成了PWMx_BRK,例程里的STC32G.H文件中也同样为PWMx_BRK。但是最新的数据手册和头文件都是PWMx_BKR。如果有需要的话,可以下载最新的库函数,将PWM部分的三个文件替换,并修改#include "typedef.h"为CosyOS的#include "CosyOS.H"。下载最新的STC32G.H替换头文件。最新的STC32G.H头文件下面要将CosyOS原STC32G.H头文件最下面的补充部分添加进来。
//===================================================

#define        Priority_0                        0        //中断优先级为 0 级(最低级)
#define        Priority_1                        1        //中断优先级为 1 级(较低级)
#define        Priority_2                        2        //中断优先级为 2 级(较高级)
#define        Priority_3                        3        //中断优先级为 3 级(最高级)

#define ENABLE                1
#define DISABLE                0

#define SUCCESS                0
#define FAIL                -1

点评

大家也都注意下!  详情 回复 发表于 2024-9-8 02:48
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:472
  • 最近打卡:2025-06-27 16:25:11

5

主题

1154

回帖

4509

积分

荣誉版主

积分
4509
发表于 2024-9-8 02:36:56 | 显示全部楼层
王*** 发表于 2024-9-7 03:36
并不是我疏忽,而是我尝试想要在 task_2 中关闭LED,如我上贴中的照片所示,实际效果是LED仍然亮起
正常来 ...

哦,原来是这样,那证明 task_2 确实没有正常运行。
我也看不出问题出在哪里,
建议开启 任务管理器 辅助判断问题出在哪里。

我已用 STC8H8K64U 按照你的方法进行了测试,task_2 可正常运行、LED也正常。
截图202409080202163412.jpg

截图202409080203385096.jpg

截图202409080204284336.jpg

截图202409080206082198.jpg


建议你把 任务管理器、printf 都配置好,辅助判断问题出在哪里。
总之,你要相信 CosyOS 是不存在这种低级的问题的,
当前 已有很多朋友都在使用 CosyOS,并应用在实际产品中。
出了问题,就要采用一些方法找出问题出在哪里。
我手中没有和你一样的板子,无法做出和你完全相同的测试,所以还得靠你自己了。
建议你没必要保留 STC8H 的代码,直接替换为 STC8C 的代码即可,并删除没用的test任务等。
task_2 中做一个delay,每运行一次都 printf("task_2: %u\r\n", ++i); 这样很好啊,可以看出 task_2 运行了几次?
先把注意力集中在 task_2 是否运行,运行了几次上,不要只盯着 LED。
如果 task_2 运行了,LED不正常再找LED的原因;
如果 task_2 未运行,就找 task_2 不能运行的原因。
我的测试结论就是 task_2 可以正常运行,你就要靠你自己了,毕竟 板子不同,头文件不同,相关的代码也有差异。

下面是我的最新测试方法:
截图202409080231463135.jpg

task_2 每一秒钟运行一次,IO取反,这样LED 会亮一秒、灭一秒闪烁,可正常亮灭。
截图202409080233482241.jpg

task_2已经运行1000多次了,没有问题。

回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-7-1 10:08 , Processed in 0.154105 second(s), 112 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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