一个任务如何在多个 vxworks 队列上等待?

2023-12-30

我们有一个 vxWorks 设计,需要一个任务来处理来自两个消息队列 Q1 和 Q2 的消息。

我们希望在两个队列上等待,无论哪个队列收到消息,都处理队列中的消息。

我们希望避免轮询队列或使用可能导致其他队列填满的超时值。

有没有办法做到这一点?


如果使用命名管道(pipeDevCreate()、write()、read())而不是消息队列,则可以使用 select() 进行阻塞,直到任一管道中有消息为止。

每当 select() 触发时,您就会处理高优先级管道中的所有消息。然后处理来自低优先级管道的一条消息。然后再次调用 select (循环)。

示例代码片段:

 // Initialization: Create high and low priority named pipes
 pipeDrv(); //initialize pipe driver
 int fdHi = pipeDevCreate("/pipe/high",numMsgs,msgSize);
 int fdLo = pipeDevCreate("/pipe/low",numMsgs,msgSize);

 ...

 // Message sending thread: Add messages to pipe
 write(fdHi, buf, sizeof(buf));

 ...

 // Message processing Thread: select loop
 fd_set rdFdSet;

 while(1)
 {
     FD_ZERO(&rdFdSet);
     FD_SET(fdHi, &rdFdSet);
     FD_SET(fdLo, &rdFdSet;

     if (select(FD_SETSIZE, &rdFdSet, NULL, NULL, NULL) != ERROR)
     {
         if (FD_ISSET(fdHi, &rdFdSet))
         {
             // process all high-priority messages
             while(read(fdHi,buf,size) > 0)
             {
                 //process high-priority
             }
         }

         if (FD_ISSET(fdLo, &rdFdSet))
         {
             // process a single low priority message
             if (read(fdLo,buf,size) > 0)
             {
                 // process low priority
             }
         }
     }
 }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

一个任务如何在多个 vxworks 队列上等待? 的相关文章

  • VxWorks 6.8 图像项目未编译

    我正在使用 Wind River Workbench 3 3 和 VxWorks 6 8 当从命令行使用构建时 一切正常 但是当我尝试在工作台中构建时 我收到错误 在尝试追踪它时 我确定使用我们的主板支持包和 gnu 工具链创建新的 VxW
  • Arm裸机系统CPU使用率测量

    我正在研究一个ARM cortex M4评估板 它是bare metal应用程序 无需在其上运行任何操作系统 现在我想测量CPU使用给定的流程 算法 最好的方法是什么 我应该实施一个操作系统来衡量CPU具有满足这种需求的功能的用法 这个问题
  • 安全存储和访问 EEPROM

    我最近发现需要将不经常更新的配置变量存储在微控制器的 EEPROM 中 向程序添加状态会立即让人担心 检测 EEPROM 中未初始化的数据 即首次启动 转换旧固件版本的数据或使其无效 以及 多个结构的寻址 每个结构都可能在固件更新中增长 广
  • 合并 2 个或更多 ELF 文件的最简单方法

    我正在为一个类项目编写一些嵌入式代码 该项目当前 根据要求 创建了许多 srec 文件并合并它们 我希望能够将此代码加载到 QEMU 中 但它通常只对 ELF 文件满意 合并原始 ELF 文件而不是 srecs 的最有效方法是什么 同样可以
  • IIR 滤波器的 C 语言实现

    我正在尝试用 C 实现 IIR 滤波器FRDM KL25Z http www freescale com webapp sps site prod summary jsp code FRDM KL25Z木板 我当前的代码如下所示 inclu
  • 控制 Linux 嵌入式应用程序的启动屏幕

    在嵌入式编程中 通常需要用一些自定义的 加载 动画或从开机到启动并运行的启动屏幕来替换默认的 Linux 启动输出 达到这个目的的方法是什么 有没有办法在整个启动序列中使用相同的 进程 如何解决这个问题 我猜我们需要一个自制内核来实现这一点
  • 嵌入式使用的轻量级(解)压缩算法

    我有一个带有图形用户界面的低资源嵌入式系统 该界面需要字体数据 为了节省只读存储器 闪存 需要压缩字体数据 我正在寻找一种用于此目的的算法 要压缩的数据的属性 每个像素 8 位的矩形像素图的透明度数据 字体中通常有大约 200 300 个字
  • 将 gcc libs .data 放在特定部分?

    我正在尝试为我们的嵌入式系统切换到 GNU GCC 编译器 但由于我们芯片的内存布局被分割 我在链接该项目时遇到了问题 RAM section 1 0x10000 0x12FFF RAM section 2 0x18000 0x1BFFF
  • 写入数据到寄存器

    我有某个寄存器的内存地址 地址LCDCW1是C000 c codes define LCDCW1 0xC000 LCDCW1 0x31 我只想将数据写入该寄存器 代码有问题 如何修改 thx 正如其他人所建议的那样 您可以声明一个适当的指针
  • 将指向 const 的指针或指向 const 的 const 指针声明为形参

    我最近对代码进行了一些调整 其中我必须更改函数中的形式参数 最初 该参数类似于以下内容 注意 该结构之前已进行类型定义 static MySpecialStructure my special structure static unsign
  • C++ 异常处理增加了多少占用空间

    这个问题对于嵌入式开发尤其重要 异常处理为生成的二进制输出增加了一些占用空间 另一方面 毫无例外 错误都需要以其他方式处理 这需要额外的代码 最终也会增加二进制大小 我对你的经历很感兴趣 尤其是 您的编译器为异常处理添加的平均占用空间是多少
  • 使用 gnueabihf 为 ARMv6 构建

    我尝试为 ARMv6 构建应用程序 但失败了 我猜问题是工具链支持硬浮点 但 ARMv6 不支持 好吧 首先我设置 march armv6 编译失败 opt gcc linaro arm linux gnueabihf 4 8 2014 0
  • WinForms 中如何处理不可见控件的绘制?

    我正在尝试覆盖OnPaintwindows窗体中的事件 NET 紧凑框架 到目前为止 我已经能够使用渐变 圆角矩形等来绘制控件 而这通常是常规控件无法实现的 但是 当我想让控件不可见时 我遇到了问题 现在 我所做的就是重新绘制除那些不可见控
  • Linux 中的直接内存访问

    我正在尝试直接访问嵌入式 Linux 项目的物理内存 但我不确定如何最好地指定内存供我使用 如果我定期启动设备并访问 dev mem 我就可以轻松地读写任何我想要的位置 然而 在这里 我访问的是可以轻松分配给任何进程的内存 我不想做 我的
  • c - 将 uint8_t* 转换为 uint32_t* 行为

    我读过这个问题 将 uint8 转换为 uint32 如何工作 https stackoverflow com questions 28603243 how does casting uint8 to uint32 work但我不确定给出的
  • C 嵌入式应用程序中 time() 函数的问题

    我在用time 在 ARM 微控制器上 处理器一到达此函数就会重新启动 奇怪的是 当我处于调试模式时 代码运行得很好 但一旦我想将其应用到独立模式 我就会遇到重置 我是否忽略了什么 这个功能有替代品吗 代码部分是这样的 include
  • 在 Visual Studio 中进行嵌入式代码开发(尤其是使用 C18 的 PIC)

    我使用 Visual Studio 编写桌面应用程序 我发现它非常用户友好且易于使用 如果可能的话 我还想在Visual Studio中编写嵌入式代码 例如 是否可以使用 C18 或任何其他类似的基于 C 的语言为 PIC18Fxxx 系列
  • 用于嵌入式服务器的 Web 技术

    我最近开始了一个针对嵌入式设备的新 Web 开发项目 并希望征求一些有关使用技术的建议 该设备将提供 HTML 页面 其中包括用于从 JSON 服务器检索数据的 AJAX 代码 我们暂时使用 Cherokee 作为 Web 服务器 但我们并
  • 如何随时暂停 pthread?

    最近我开始将 ucos ii 移植到 Ubuntu PC 上 我们知道 在pthread的回调函数中的 while 循环中简单地添加一个标志来执行暂停和恢复是不可能模拟ucos ii中的 进程 的 如下解决方案 因为ucos ii中的 进程
  • 在嵌入式 Jetty 上使用 DefaultServlet 提供静态 html 文件

    我正在开发一个需要独立的项目 因此我决定将 Jetty 嵌入到我的应用程序中 我将提供静态 HTML 页面 一些 JSP 页面 并且还将使用一些自定义 servlet 我找到了一个完美的示例 说明如何设置嵌入式 Jetty 来完成所有这一切

随机推荐