亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Industrial Internet of Things >> 嵌入式

Nucleus SE信号:高效任务间通信实战

在RTOS Revealed系列中,我们探索信号——Nucleus SE中最简单、低成本的任务间通信方法。信号实现任务间轻量、可靠的消息传递。

使用信号

与其他内核对象不同,信号非自主;它们内在关联任务,仅存在于该任务上下文中。应用启用信号时,每个任务自动获得八个二进制信号标志集。

任意任务可设置另一任务的信号标志。但仅拥有任务可读取和清除这些标志——且读取是破坏性的,即读取操作中标志被复位。无其他任务能检查或修改任务的信号状态。

Nucleus RTOS提供机制让任务指定回调,在另一任务设置其信号标志时运行。这类似中断服务程序。遗憾的是,此功能Nucleus SE不可用;任务必须显式轮询信号标志。

配置信号

信号主要通过nuse_config.h中#define指令配置。关键宏NUSE_SIGNAL_SUPPORT设为TRUE时,激活整个应用的信号支持。每任务信号数固定为八;无需额外配置。

启用信号创建必要数据结构并激活相关API调用。Nucleus SE每个API函数有专用启用宏。信号相关启用:

NUSE_SIGNALS_SEND NUSE_SIGNALS_RECEIVE

默认全为FALSE,禁用对应服务调用并省略实现代码。使用信号需将所需启用设为TRUE。未启用API而调用将导致编译时错误;使用未实现API导致链接时错误。

nuse_config.h示例片段:

#define NUSE_SIGNAL_SUPPORT FALSE /* 启用信号支持 */ #define NUSE_SIGNALS_SEND FALSE /* 服务调用启用器 */ #define NUSE_SIGNALS_RECEIVE FALSE /* 服务调用启用器 */

信号服务调用

Nucleus SE提供四个主要信号相关服务调用。仅两个在SE实现;其余保留给RTOS但SE无。

发送与接收操作

信号标志是位,最佳可视化为二进制数。因标准C无二进制字面量,Nucleus SE含nuse_binary.h,定义如b01010101等所有256个8位值宏。

#define b00000000 ((U8)0x00) #define b00000001 ((U8)0x01) #define b00000010 ((U8)0x02) #define b00000011 ((U8)0x03) #define b00000100 ((U8)0x04) #define b00000101 ((U8)0x05)

发送信号

任意任务可通过OR操作在另一任务上设置一个或多个信号标志——先前设置的标志保持不变。

Nucleus RTOS API调用

STATUS NU_Send_Signals(NU_TASK *task, UNSIGNED signals);

参数:

返回:

Nucleus SE API调用

STATUS NUSE_Signals_Send(NUSE_TASK task, U8 signals);

参数:

返回:

NUSE_Signals_Send()实现

STATUS NUSE_Signals_Send(NUSE_TASK task, U8 signals){ #if NUSE_API_PARAMETER_CHECKING if (task >= NUSE_TASK_NUMBER){ return NUSE_INVALID_TASK; } #endif NUSE_CS_Enter(); NUSE_Task_Signal_Flags[task] |= signals; NUSE_CS_Exit(); return NUSE_SUCCESS; }

接收信号

任务只能读取自身信号标志,操作破坏性——读取时标志被清零。

Nucleus RTOS API调用

UNSIGNED NU_Receive_Signals(VOID);

返回当前信号标志值。

Nucleus SE API调用

U8 NUSE_Signals_Receive(void);

返回当前信号标志值。

NUSE_Signals_Receive()实现

U8 NUSE_Signals_Receive(void){ U8 signals; NUSE_CS_Enter(); signals = NUSE_Task_Signal_Flags[NUSE_Task_Active]; NUSE_Task_Signal_Flags[NUSE_Task_Active] = 0; NUSE_CS_Exit(); return signals; }

这些直观函数展示Nucleus SE如何高效管理信号,不影响任务阻塞或调度。

嵌入式

  1. 人工神经网络提升无线通信性能
  2. 柔性整流天线将WiFi信号转电能:为微型设备供电新突破
  3. 量子电路突破极限:探测最微弱射频信号(单光子级)
  4. 半导体激光器实现微波收发:超高速Wi-Fi关键突破
  5. 实时滑音算法无缝融合任意两音频信号
  6. RF 与微波 PCB 设计核心原则:高频可靠性的基石
  7. Nucleus SE信号:高效任务间通信实战
  8. Rutronik 分销 Redpine Signals RS14100:超低功耗、多协议安全无线 MCU
  9. Rutronik 提供 Redpine Signals 超低功耗多协议 SoC
  10. 实时射频成像技术:远距离穿墙探测隐藏与高速移动目标
  11. 可拉伸传感器材料提升电子器件受拉性能
  12. 首次测量单个原子原子核的磁性特征