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

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

[复制链接]
need_a_smile 提问时间: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
发送一个指针类型的吧
need_a_smile 回答时间: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;  
复制代码
need_a_smile 回答时间: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管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版