【发布时间】:2017-04-07 05:00:34
【问题描述】:
我已阅读所有其他问题,但回复对我没有太大帮助。 再说一遍,我不是开发人员,而是一名木工,试图让自己的大脑过于复杂。
我在 PIC 上工作,它的对齐是 4 个字节,所有结构都用 attribute((packed)) 定义。
我找到了一种方法,但它使用 malloc 和 str/mem-cpy,这些方法对于中断或我根本不应该使用的 malloc 不安全(参见我之前的问题)
所述结构包含 16 个无符号字符,一个 s16(2 个字节)和三个 s32(4 个字节),因此它的长度为 30 个字节,4 字节对齐使其长度为 32 个字节。 (字符编码为 8 位)。
1) 到这里为止我错了吗?
int len =sizeof(data_out.point[i]);
unsigned char* raw;
raw = malloc(len);
memcpy(raw, &data_out.point[i], len);
Data_res[count].pData = malloc(len);
for (int k = 0; k<len; k++)
{
Data_res[count].pData[k] = (uint8_t)(raw[k]);
}
Data_res[count].DataLen=len;
count++;
}
data_out 是一个结构(成员不相关,除了以下一个) 点是前面描述的结构。
Data_res 是一个存储 uchar 缓冲区 (pData) 并包含长度和状态(锁定、写入等以避免多访问)的结构。
1) 它不能 100% 工作,有时结果真的很奇怪。
2) 从昨天开始我就明白它为什么不好了(malloc 在非共享内存上,强制转换 malloc,中断安全等)。
如何在没有 malloc/memcpy 的情况下做同样的事情?
注意:我需要这个来调试输出,我本来打算放手的,但我不喜欢让事情未完成......
【问题讨论】:
-
@LưuVĩnhPhúc 正如我在 2 上所说的那样)我现在知道这很糟糕。