逢dududu必shu 发表于 2025-9-29 13:34

数据类型适配与转换

根据传输宽度调整数据类型,利用自然对齐特性:
c
运行
// 对于32位DMA传输,使用uint32_t数组并处理剩余字节
#define BUF_SIZE 100
#define ALIGNED_BUF_SIZE ((BUF_SIZE + 3) / 4)// 向上取整

uint32_t aligned_buffer = {0};
uint8_t *data_ptr = (uint8_t *)aligned_buffer;// 8位访问指针

// 填充数据(8位方式)
void fill_buffer(const uint8_t *data, uint32_t len) {
    for(uint32_t i = 0; i < len; i++) {
      data_ptr = data;
    }
}

// 配置DMA传输(32位方式)
void configure_dma() {
    uint32_t transfer_words = (BUF_SIZE + 3) / 4;// 总字数
    uint32_t remaining_bytes = BUF_SIZE % 4;       // 剩余字节数

    // 配置DMA传输大部分数据(32位)
    if(transfer_words > 0) {
      DMA_Config(aligned_buffer, transfer_words - (remaining_bytes ? 0 : 1));
    }

    // 处理剩余字节(若有)
    if(remaining_bytes) {
      // 使用8位DMA传输剩余字节
      DMA_Config_8bit(&data_ptr, remaining_bytes);
    }
}
优势:完全满足对齐要求,适用于混合宽度传输

缺点:需要处理字节序和剩余字节,逻辑较复杂

麻花油条 发表于 2025-9-30 12:08

建议简化剩余字节处理

麻花油条 发表于 2025-9-30 12:09

完全使用 32 位传输,逻辑简单。

jcky001 发表于 2025-9-30 12:43

适用高性能、严格对齐的 DMA 传输场景。

classroom 发表于 2025-9-30 13:09

满足严格对齐要求,提升传输效率。适用于混合宽度传输场景。

duo点 发表于 2025-9-30 15:10

建议用填充法简化剩余字节处理。统一字节序,避免解析错误。

pl202 发表于 2025-10-6 19:18

数据类型适配与转换是确保程序高效运行和资源合理利用的核心环节。

wangdezhi 发表于 2025-10-6 20:28

浮点数运算在嵌入式中通常较慢,且可能没有硬件支持​

averyleigh 发表于 2025-10-6 22:00

通过DMA传输大块数据时,使用uint32_t数组并处理剩余字节,确保对齐且减少传输次数

adolphcocker 发表于 2025-10-7 08:39

避免因类型不对齐导致内存浪费或访问效率下降。

abotomson 发表于 2025-10-7 19:50

需按自然边界对齐,否则可能导致访问错误或性能下降8。

mnynt121 发表于 2025-10-7 21:20

通信协议中的字节序与对齐            

yorkbarney 发表于 2025-10-8 11:11

直接决定了程序的内存占用、运行速度和稳定性。

abotomson 发表于 2025-10-8 16:20

转换分为隐式转换和显式转换            

juliestephen 发表于 2025-10-8 19:28

“转换”指的是将一个数据从一种类型变为另一种类型。这分为隐式转换和显式转换。

pmp 发表于 2025-10-8 21:01

合运算时要特别小心,最好统一类型后再进行比较或运算。

janewood 发表于 2025-10-10 12:26

通过填充字节或调整数组大小实现对齐

modesty3jonah 发表于 2025-10-10 16:57

“适配” 是指在开始编码前,根据具体应用场景选择最合适的数据类型。

olivem55arlowe 发表于 2025-10-11 12:39

***选择能容纳你数据范围的最小类型。

sdCAD 发表于 2025-10-11 18:10

小心整数与浮点数转换,避免精度丢失
页: [1] 2 3 4
查看完整版本: 数据类型适配与转换