你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

用FreeRTOS,使用队列怎么发送一个结构体呢?osMessagePut有局...

[复制链接]
寒风飘飘 提问时间:2016-9-12 11:14 /


在函数osMessageGet 只能返回一个4个字节啊。在xQueueReceive它只传了一个uint32_t  v啊,只有四个字节。
那就限制了最大的数据就是四个字节了,感觉应该不会是这样啊,那么我怎么使用队列,发送一个12个字节的结构体呢?


osEvent osMessageGet (osMessageQId queue_id, uint32_t millisec)
{
  portBASE_TYPE taskWoken;
  TickType_t ticks;
  osEvent event;
...................
...............
  else {
    if (xQueueReceive(queue_id, &event.value.v, ticks) == pdTRUE) {
      /* We have mail */
  }
    return event;
}

typedef struct  {
  osStatus                 status;     ///< status code: event or error information
  union  {
    uint32_t                    v;     ///< message as 32-bit value
    void                       *p;     ///< message or mail as void pointer
    int32_t               signals;     ///< signal flags
  } value;   
union  {
    osMailQId             mail_id;     ///< mail id obtained by \ref osMailCreate
    osMessageQId       message_id;     ///< message id obtained by \ref osMessageCreate
  } def;                               ///< event definition


收藏 1 评论7 发布时间:2016-9-12 11:14

举报

7个回答
高二毛 回答时间:2016-9-12 13:21:15
发送一个指针类型的吧
寒风飘飘 回答时间:2016-9-12 16:54:59
只有发送一个地址了,这样还得定义一个数组或者链表来做缓存。有点麻烦了。
高二毛 回答时间:2016-9-13 08:20:32
这点麻烦算是上事,起码有个思路先跑通。后续可以再考虑优化。
Serval 回答时间:2016-9-13 13:57:59
寒风飘飘 发表于 2016-9-12 16:54
只有发送一个地址了,这样还得定义一个数组或者链表来做缓存。有点麻烦了。 ...

union里有void *p,直接传指针也可以的吧?

  1. typedef struct  {
  2.   osStatus                 status;     ///< status code: event or error information
  3.   union  {
  4.     uint32_t                    v;     ///< message as 32-bit value
  5.     void                       *p;     ///< message or mail as void pointer
  6.     int32_t               signals;     ///< signal flags
  7.   } value;  
复制代码
寒风飘飘 回答时间:2016-9-13 14:20:57
可以传指针,v和*p是一样的,因为可以强制转换,都可以用,都是4个字节。
maiweiqi 回答时间:2016-9-14 10:00:05
考虑到效率,都是用传指针的吧,转换回去就是了,如果要发送一个结构体如果是局部变量还要复制内存,多麻烦。
幸运四叶草 回答时间:2019-11-5 23:47:31
只有用osMailPut (osMailQId queue_id, void *mail);了

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版