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

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

 火... [复制链接]
  • 打卡等级:以坛为家II
  • 打卡总天数:432
  • 最近打卡:2025-05-01 16:19:56

5

主题

1127

回帖

4263

积分

荣誉版主

积分
4263
发表于 2024-11-2 18:00:13 | 显示全部楼层
sdw*** 发表于 2024-11-2 16:29
这个结构体定义的东西大多数能模糊的知道做什么用,于是让AI来分析了下,作者看看AI分析的正确吗?
...

八成是差不多的,但一些细节还不够准确。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:117
  • 最近打卡:2025-03-06 09:50:21

6

主题

142

回帖

638

积分

高级会员

积分
638
发表于 2024-11-3 08:30:38 | 显示全部楼层
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:2
  • 最近打卡:2025-04-08 10:41:18

2

主题

45

回帖

440

积分

中级会员

积分
440
发表于 2024-11-3 10:58:17 | 显示全部楼层
本帖最后由 CosyOS 于 2024-11-3 15:34 编辑

这三种队列分别在什么情况下使用?

/**
\brief        队列控制块
\detail       静态队列与动态队列通用的控制块。
                 创建队列时,并不会定义此控制块;
                 访问队列时,通过引用指向此控制块的指针(句柄),可访问不同类型(静态、动态)的队列控制块。
*/
typedef        struct
{
        size_t counter;
        const s_u8_t type;
        const s_u8_t mode;
        const size_t len;
        s_tasknode_tsp node;
        volatile s_bool_t mutex;

}s_queue_ts;
typedef        s_queue_ts _STATIC_MEM_ *s_queue_tsp; /*!< 队列句柄 */

/**
\brief        静态队列控制块
\detail       创建静态队列时,会定义此控制块。
*/
typedef        struct
{
        size_t counter;
        const s_u8_t type;
        const s_u8_t mode;
        const size_t len;
        s_tasknode_tsp node;
        volatile s_bool_t mutex;

        void * _STATIC_MEM_ * head;
        void * _STATIC_MEM_ * tail;
        void * _STATIC_MEM_ * const base;

}ss_queue_ts;
typedef        ss_queue_ts _STATIC_MEM_ *ss_queue_tsp; /*!< 队列句柄 */

/**
\brief        动态队列控制块
\detail       创建动态队列时,会定义此控制块。
*/
typedef        struct
{
        size_t counter;
        const s_u8_t type;
        const s_u8_t mode;
        const size_t len;
        s_tasknode_tsp node;
        volatile s_bool_t mutex;

        s_msgnode_tsp head;
        s_msgnode_tsp tail;

}sd_queue_ts;
typedef        sd_queue_ts _STATIC_MEM_ *sd_queue_tsp;  /*!< 队列句柄 */


点评

1、创建队列时,队列名称 就是 该队列控制块的名称。 /* 创建静态消息队列 */ #define sCSV_CreateQueue(name, mode, len) \ void *u_queue_##name[len]; \ ss_queue_ts name = {0, __STATIC__, mode, len, OS_N  详情 回复 发表于 2024-11-3 15:41
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:432
  • 最近打卡:2025-05-01 16:19:56

5

主题

1127

回帖

4263

积分

荣誉版主

积分
4263
发表于 2024-11-3 15:41:55 | 显示全部楼层
sdw*** 发表于 2024-11-3 10:58
这三种队列分别在什么情况下使用?

/**

1、创建队列时,队列名称 就是 该队列控制块的名称。

/* 创建静态消息队列 */
#define sCSV_CreateQueue(name, mode, len) \
        void *u_queue_##name[len]; \
        ss_queue_ts name = {0, __STATIC__, mode, len, OS_NULL, true, u_queue_##name, u_queue_##name + len - 1, u_queue_##name}

/* 创建动态消息队列 */
#define dCSV_CreateQueue(name, mode, len) \
        sd_queue_ts name = {0, __DYNAMIC__, mode, len, OS_NULL, true, OS_NULL, OS_NULL}


2、访问队列时,队列名称取址再转换为 s_queue_tsp 类型,便可访问队列控制块,无论是静态还是动态皆可。

/* 接收消息 */
#define uRecvMsg(que, tc)  sUSV_RecvMsg((s_queue_tsp)&que, tc)

/* 发送消息 */
#define uSendMsg(que, msg) sUSV_SendMsg((s_queue_tsp)&que, msg)


回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:274
  • 最近打卡:2025-04-27 10:30:07
已绑定手机

1

主题

73

回帖

1236

积分

金牌会员

积分
1236
发表于 2024-11-4 09:52:14 | 显示全部楼层
请教一个问题,串口1接收Buffer清空数组里面数据的问题。
我现在串口1已经能够接收到数据了。但是我想清空buffer里面的数据。程序就会卡死不动了。
截图202411040948101933.jpg
截图202411040952127000.jpg

点评

这个需要结合整体来看,仅看这两段代码,无法确定原因。 memset 是可重入函数,你的写法也没有问题。 1、其它任务是否也访问了 DMABuffer?如其它任务做接收解析,导致 DMABuffer 重入? 2、task_1 中 memset 过程  详情 回复 发表于 2024-11-4 11:56
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:432
  • 最近打卡:2025-05-01 16:19:56

5

主题

1127

回帖

4263

积分

荣誉版主

积分
4263
发表于 2024-11-4 11:56:54 | 显示全部楼层
本帖最后由 CosyOS 于 2024-11-4 12:57 编辑
DIY*** 发表于 2024-11-4 09:52
请教一个问题,串口1接收Buffer清空数组里面数据的问题。
我现在串口1已经能够接收到数据了。但是我想清空b ...

这个需要结合整体来看,仅看这两段代码,无法确定原因。
memset 是可重入函数,你的写法也没有问题。

1、其它任务是否也访问了 DMABuffer?如其它任务做接收解析,导致 DMABuffer 重入?
2、task_1 中 memset 过程中,是否可能进入 UART1接收中断,导致 DMABuffer 重入?
是否可能是 DMABuffer 重入导致的异常?

另外,建议你 DMABuffer 为 255,
u8 xdata DMABuffer[255];
u8 Rx_cnt;

if(RI){
    RI = 0;
    if(Rx_cnt < 255) DMABuffer[Rx_cnt++] = SBUF;
    ...

如果 DMABuffer 必须大于255,那 RX_cnt 为 u8 会溢出的,应改为u16.



有时,出问题貌似与XX有关,但也未必,真正的原因可能与XX毫无关系,
只是时间上的恰到好处,正赶上XX运行的时候出的问题。所以,不能只
盯着 memset、DMABuffer,而应着眼于全局。




回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:2
  • 最近打卡:2025-04-08 10:41:18

2

主题

45

回帖

440

积分

中级会员

积分
440
发表于 2024-11-5 11:07:05 | 显示全部楼层
*ptr++ = var /**/+ '0';

Lable_1: *ptr++ = (var % 10) /**/+ '0';

这几个表达式注释加在中间是书写错误还是就是这样,如果就是这样,请作者解惑?

点评

这个“空注释”仅是用来实现上下行代码的空间布局,使其形成一种队形, 玩的完全是感觉,没有特殊的作用,可以删除掉。如: 这样写: Lable_4: *ptr++ = (var % 10000) / 1000 + '0'; Lable_3: *ptr++ = (var %  详情 回复 发表于 2024-11-5 14:22
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:186
  • 最近打卡:2025-03-06 09:49:49

14

主题

133

回帖

1149

积分

金牌会员

积分
1149
发表于 2024-11-5 14:09:25 | 显示全部楼层
CosyOS-II 最新版_说明文档.zip下载学习中
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:432
  • 最近打卡:2025-05-01 16:19:56

5

主题

1127

回帖

4263

积分

荣誉版主

积分
4263
发表于 2024-11-5 14:22:33 | 显示全部楼层
本帖最后由 CosyOS 于 2024-11-5 14:25 编辑
sdw*** 发表于 2024-11-5 11:07
*ptr++ = var /**/+ '0';

Lable_1: *ptr++ = (var % 10) /**/+ '0';

这个“空注释”仅是用来实现上下行代码的空间布局,使其形成一种队形,
玩的完全是感觉,没有特殊的作用,可以删除掉。如:

这样写:

        Lable_4: *ptr++ = (var % 10000) / 1000 + '0';
        Lable_3: *ptr++ = (var % 1000) / 100 + '0';
        Lable_2: *ptr++ = (var % 100) / 10 + '0';
        Lable_1: *ptr++ = (var % 10) + '0';

显得不够优雅;


这样写:

        Lable_4: *ptr++ = (var % 10000) / 1000 + '0';
        Lable_3: *ptr++ = (var % 1000) / 100 + '0';
        Lable_2: *ptr++ = (var % 100) / 10 + '0';
        Lable_1: *ptr++ = (var % 10) / 1 + '0';

就比较优雅了!
但 有些编译器(我记得是 C251)不支持 /1 的写法,会有警告或错误;


所以就这样写:

        Lable_4: *ptr++ = (var % 10000) / 1000 + '0';
        Lable_3: *ptr++ = (var % 1000) / 100 + '0';
        Lable_2: *ptr++ = (var % 100) / 10 + '0';
        Lable_1: *ptr++ = (var % 10) /**/+ '0';

与 /1 的写法保持相同的队形。



bug 是没有的,不用纠结!



回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:2
  • 最近打卡:2025-04-08 10:41:18

2

主题

45

回帖

440

积分

中级会员

积分
440
发表于 2024-11-5 23:19:22 | 显示全部楼层
作者能否抽时间做个这样的文档,用 思维导图 的形式将MCU上电后开始到进入系统,创建任务,运行任务等所有步骤,用到的函数等信息都画出来,让人一看就有一种掌握全局的感觉。例如图片所示:
111.png
222.png

点评

你说的很有道理,我会尽快做这件事。  发表于 2024-11-6 12:41
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-2 04:24 , Processed in 0.129199 second(s), 118 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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