在 C 中动态更改变量中的多个管道值可能吗?

标签 c variables pipe definition

我正在尝试想出一种方法来更改 SAI 中的事件插槽定义 用 C 编写的音频定义 block 。

#define ACTIVE_TDM_SLOTS 1|2|3|4|5|6|7|8

这些数字是此结构中使用的 uint32_t 值,当存在​​时激活微 Controller 上的 TDM 音频插槽。

typedef struct{ 
  uint32_t FirstBitOffset;                            
  uint32_t SlotSize;        
  uint32_t SlotNumber;                           
  uint32_t SlotActive;  
}SAI_SlotInitTypeDef;

我正在尝试考虑一种方法来根据需要激活的 channel 来动态更改 ACTIVE_TDM_SLOTS 的构成。 256 种可能的事件 channel 组合。 我可以初始化和取消初始化硬件插槽来更改事件插槽的配置。

我假设 #define #ifdef/#endef 都是预处理器,所以我需要以某种方式使用变量?

我可以从 ACTIVE_TDM_SLOTS 所需的事件 channel 中创建一个字符串,但如何将其加载到变量中?我可以使用一组 char *var 并将它们连接到变量中吗?

我一开始并不完全确定管道是如何与定义一起工作的!也许只是无法将其加载到变量中?

我的另一个解决方案是在 DMA 流入时过滤事件插槽数据,但激活或停用所需插槽似乎更明智?

如果有用的话,很乐意上传更多代码。

最佳答案

好吧,我想我错过了一件明显的事情。

SAI_SLOT_NOTACTIVE 0;

我只是将 0 分配给 | uint32_t 变量 |那些不活跃的。 我在想我必须删除 slotActive 列表中的插槽!

如果这有效,我会回复以防其他尝试者感到困惑 动态更改 ARM STM32xxx 上的 SAI TDM 音频插槽配置

原始定义

     /* SAI_Block_Slot_Active SAI Block Slot Active */
        #define SAI_SLOT_NOTACTIVE           ((uint32_t)0x00000000U)
        #define SAI_SLOTACTIVE_0             ((uint32_t)0x00000001U)
        #define SAI_SLOTACTIVE_1             ((uint32_t)0x00000002U)
        #define SAI_SLOTACTIVE_2             ((uint32_t)0x00000004U)
        #define SAI_SLOTACTIVE_3             ((uint32_t)0x00000008U)
        #define SAI_SLOTACTIVE_4             ((uint32_t)0x00000010U)
        #define SAI_SLOTACTIVE_5             ((uint32_t)0x00000020U)
        #define SAI_SLOTACTIVE_6             ((uint32_t)0x00000040U)
        #define SAI_SLOTACTIVE_7             ((uint32_t)0x00000080U)
        #define SAI_SLOTACTIVE_8             ((uint32_t)0x00000100U)
        #define SAI_SLOTACTIVE_9             ((uint32_t)0x00000200U)
        #define SAI_SLOTACTIVE_10            ((uint32_t)0x00000400U)
        #define SAI_SLOTACTIVE_11            ((uint32_t)0x00000800U)
        #define SAI_SLOTACTIVE_12            ((uint32_t)0x00001000U)
        #define SAI_SLOTACTIVE_13            ((uint32_t)0x00002000U)
        #define SAI_SLOTACTIVE_14            ((uint32_t)0x00004000U)
        #define SAI_SLOTACTIVE_15            ((uint32_t)0x00008000U)
        #define SAI_SLOTACTIVE_ALL           ((uint32_t)0x0000FFFFU)

示例,其中 channel 1 2 3 4 路由到第 4 个记录槽,并且 channel 5 6 7 8 已禁用

channel 数更改为使用的插槽数

 /* TDM record slot assign to channel or deactivate any TDMx value 0 to disable slot */ 
        uint32_t TDM1 = SAI_SLOTACTIVE_0; 
        uint32_t TDM2 = SAI_SLOTACTIVE_1;
        uint32_t TDM3 = SAI_SLOTACTIVE_2;
        uint32_t TDM4 = SAI_SLOTACTIVE_3;
        uint32_t TDM5 = SAI_SLOT_NOTACTIVE;
        uint32_t TDM6 = SAI_SLOT_NOTACTIVE;
        uint32_t TDM7 = SAI_SLOT_NOTACTIVE;
        uint32_t TDM8 = SAI_SLOT_NOTACTIVE;

haudio_out_sai.SlotInit.SlotActive = TDM1 | TDM2 | TDM3 | TDM4 | TDM5 | TDM6 | TDM7 | TDM8;

haudio_out_sai.SlotInit.SlotNumber = 4;

关于在 C 中动态更改变量中的多个管道值可能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55235423/

相关文章:

c - 如何对已经类型定义的标识符进行类型定义?

android - 我可以使用变量而不是 mp3 资源 ID 在 android 中播放声音吗

r - 修改数据框中变量的值

c++ - 使用 C/C++ 通过管道向/从 Powershell 设置 UTF-8 输入和获取 UTF-8 输出

python - 有什么方法可以从当前正在执行的 python 程序中逐行输出管道?

c++ - 将 float 转换为字符串而不会丢失精度

c - 使用链表的 C 中的哈希表

c - 分配静态内存(作为 malloc 替换)

shell - 如何将 sed 的输出读取到变量中

http - CURL 从无限管道分块 POST?