硬汉嵌入式论坛

 找回密码
 立即注册
12
返回列表 发新帖
楼主: hpdell
收起左侧

[μCOS-III] 分享一下自己捣鼓的 cmsis-ucos3-os2 封装层,势力有线不太完善,但初步可用

  [复制链接]

719

主题

3771

回帖

5953

积分

论坛元老

积分
5953
 楼主| 发表于 2025-12-16 09:23:11 | 显示全部楼层
狠狠滴摸鱼冲浪 发表于 2025-12-16 09:10
而且你给的代码不完整,看的晕,我不知道你想传的是数据块的指针还是直接通过指针操作MessageQueue中的数 ...

我想 消息邮箱 发送是操作数据块的指针应该是比较快的吧

接收端是通过指针来操作数据块 应该是比较好的吧

回复

使用道具 举报

4

主题

55

回帖

67

积分

初级会员

积分
67
发表于 2025-12-16 09:28:07 | 显示全部楼层
本帖最后由 狠狠滴摸鱼冲浪 于 2025-12-16 09:32 编辑
hpdell 发表于 2025-12-16 09:23
我想 消息邮箱 发送是操作数据块的指针应该是比较快的吧

接收端是通过指针来操作数据块 应该是比较好 ...

传递指针效率肯定很高,是没有问题的。
就是要注意传递过来的指针指向的数据有可能过时(被修改)了,这需要你自己去实现一个机制 确保 接收到的指针指向的数据块 和 指针被发送时指向的数据块 的内容是相同的

改过的兼容层传递任意长度的数据应该是没有问题。我移植到实机上测试过。
你把创建MessageQueue和对应的控制块和缓冲区的代码发一下。
回复

使用道具 举报

4

主题

55

回帖

67

积分

初级会员

积分
67
发表于 2025-12-16 09:44:46 | 显示全部楼层
不过还是要提醒你其实这个兼容层只不过是AI编写的玩具
在一些临界状态下可能会发生问题。
最好还是用官方做的兼容层。我也不是嵌入式软件科班出来的,只是用的多
回复

使用道具 举报

719

主题

3771

回帖

5953

积分

论坛元老

积分
5953
 楼主| 发表于 2025-12-16 10:18:02 | 显示全部楼层
狠狠滴摸鱼冲浪 发表于 2025-12-16 09:28
传递指针效率肯定很高,是没有问题的。
就是要注意传递过来的指针指向的数据有可能过时(被修改)了,这 ...




你好, 你看看我现在写的详细不 ?!

ucos3-os2-msg.c (28.79 KB, 下载次数: 1)
回复

使用道具 举报

719

主题

3771

回帖

5953

积分

论坛元老

积分
5953
 楼主| 发表于 2025-12-16 10:19:14 | 显示全部楼层
狠狠滴摸鱼冲浪 发表于 2025-12-16 09:44
不过还是要提醒你其实这个兼容层只不过是AI编写的玩具。
在一些临界状态下可能会发生问题。
最好还是用 ...

我也学习一下嘛,么事的哈
回复

使用道具 举报

4

主题

55

回帖

67

积分

初级会员

积分
67
发表于 2025-12-16 10:36:12 | 显示全部楼层
hpdell 发表于 2025-12-16 10:19
我也学习一下嘛,么事的哈

ScreenShot_2025-12-16_103547_983.png
回复

使用道具 举报

4

主题

55

回帖

67

积分

初级会员

积分
67
发表于 2025-12-16 10:52:15 | 显示全部楼层
本帖最后由 狠狠滴摸鱼冲浪 于 2025-12-16 10:55 编辑

ScreenShot_2025-12-16_105444_219.png
回复

使用道具 举报

4

主题

55

回帖

67

积分

初级会员

积分
67
发表于 2025-12-16 11:08:16 | 显示全部楼层

当初始化配置的消息大小和实际读写的消息指针指向的数据结构大小不匹配时,Put 和 Get 在复制消息的时候总有一个会数据写入越界,
其实读(复制的源)也会越界,但读的影响不大。写的话,访问越界了会修改周遭内存的内容
回复

使用道具 举报

719

主题

3771

回帖

5953

积分

论坛元老

积分
5953
 楼主| 发表于 2025-12-16 14:56:28 | 显示全部楼层
狠狠滴摸鱼冲浪 发表于 2025-12-16 11:08
当初始化配置的消息大小和实际读写的消息指针指向的数据结构大小不匹配时,Put 和 Get 在复制消息的时候 ...


你说的 这个  初始化配置的消息大小和实际读写的消息指针指向的数据结构大小有可能会出现不匹配的情况,

因为 osSemaphoreId_t    ret_sem_id;   这个定义的是一个指针类型的,

当创建这个信号量后大小应该是会发送变化的,这个我要重新把 初始化消息大小重新按照最大的来分配一下看看


回复

使用道具 举报

4

主题

55

回帖

67

积分

初级会员

积分
67
发表于 2025-12-16 15:01:40 | 显示全部楼层
本帖最后由 狠狠滴摸鱼冲浪 于 2025-12-16 15:04 编辑
hpdell 发表于 2025-12-16 14:56
你说的 这个  初始化配置的消息大小和实际读写的消息指针指向的数据结构大小有可能会出现不匹配的情况 ...


这个地方处理:直接把消息大小改为 指针大小。
我不明白的意思:按你的意思使用其他 RTOS 的 cmsis_os2 兼容层没有问题,使用这个就有问题。按理说,消息队列的使用方法就应该是这样的,传递的消息的大小就应该要和初始化配置的大小一致

ScreenShot_2025-12-16_150029_675.png
回复

使用道具 举报

719

主题

3771

回帖

5953

积分

论坛元老

积分
5953
 楼主| 发表于 2025-12-16 17:07:24 | 显示全部楼层
本帖最后由 hpdell 于 2025-12-16 18:57 编辑
狠狠滴摸鱼冲浪 发表于 2025-12-16 15:01
这个地方处理:直接把消息大小改为 指针大小。
我不明白的意思:按你的意思使用其他 RTOS 的 cmsis_os ...


我发的那个发送消息与获取消息 在 rtx5 , freertos 系统上使用是没有问题的, 使用你的 v1 版本也是没有问题的,

rtx5 , freertos 消息邮箱穿的是地址, 邮箱大小貌似不关心的


但使用 你发的 v2 版本 就需要修改我的上层应用才可以,也就是你说的指针对应变量才行的

使用你的 v1 版本获取消息都是对应指针就可以

传递的消息的大小就应该要和初始化配置的大小一致 这个我刚刚改过来了


回复

使用道具 举报

719

主题

3771

回帖

5953

积分

论坛元老

积分
5953
 楼主| 发表于 2025-12-16 20:45:54 | 显示全部楼层
狠狠滴摸鱼冲浪 发表于 2025-12-16 15:01
这个地方处理:直接把消息大小改为 指针大小。
我不明白的意思:按你的意思使用其他 RTOS 的 cmsis_os ...


刚刚试过了, 计算大小改成 #define MUSIC_MESSAGE_SIZE  sizeof(Music_Message *)  这样播放失败

#define MUSIC_MESSAGE_SIZE  sizeof(Music_Message ) 这样播放就正常
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2026-1-9 16:56 , Processed in 0.046412 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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