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

mbed开发,例程中Queue和MemoryPool的定义语句怎么理解?

[复制链接]
adlu 提问时间:2016-12-1 15:35 /
本帖最后由 adlu 于 2016-12-2 10:43 编辑

mbed开发中,Queue and MemoryPool example代码如下:
  1. #include "mbed.h"
  2. #include "rtos.h"

  3. typedef struct {
  4.     float    voltage;   /* AD result of measured voltage */
  5.     float    current;   /* AD result of measured current */
  6.     uint32_t counter;   /* A counter value               */
  7. } message_t;

  8. MemoryPool<message_t, 16> mpool;
  9. Queue<message_t, 16> queue;

  10. /* Send Thread */
  11. void send_thread (void const *args) {
  12.     uint32_t i = 0;
  13.     while (true) {
  14.         i++; // fake data update
  15.         message_t *message = mpool.alloc();
  16.         message->voltage = (i * 0.1) * 33;
  17.         message->current = (i * 0.1) * 11;
  18.         message->counter = i;
  19.         queue.put(message);
  20.         Thread::wait(1000);
  21.     }
  22. }

  23. int main (void) {
  24.     Thread thread(send_thread);
  25.    
  26.     while (true) {
  27.         osEvent evt = queue.get();
  28.         if (evt.status == osEventMessage) {
  29.             message_t *message = (message_t*)evt.value.p;
  30.             printf("\nVoltage: %.2f V\n\r"   , message->voltage);
  31.             printf("Current: %.2f A\n\r"     , message->current);
  32.             printf("Number of cycles: %u\n\r", message->counter);
  33.             
  34.             mpool.free(message);
  35.         }
  36.     }
  37. }
复制代码
请问第10~11行的代码,怎么理解?

MemoryPool<message_t, 16> mpool;
Queue<message_t, 16> queue;

是C++的什么语法?



收藏 2 评论3 发布时间:2016-12-1 15:35

举报

3个回答
adlu 回答时间:2016-12-2 09:58:51
这是定义一个对象数组吗?
adlu 回答时间:2016-12-2 10:43:00
果然是C++的语法,涉及到类模板的概念。是自己C++没基础。

在MemoryPool.h和Queue.h中对这两个类的定义时,包含了其模板。
template<typename T, uint32_t pool_sz>
class MemoryPool {...}

template<typename T, uint32_t queue_sz>
class Queue {...}

MemoryPool<message_t, 16> mpool;//创建一个MemoryPool对象,名称为mpool,存储类型为message_t,容量为16
Queue<message_t, 16> queue;//创建一个Queue对象,名称为queue,存储类型为message_t的指针,长度为16

C++中模板Template的使用,参考:http://blog.sina.com.cn/s/blog_74a271040100tkmj.html
shark313-317176 回答时间:2017-7-20 09:25:05
Queue只存储直针,MemoryPool存储直接的数据

所属标签

相似问题

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