【发布时间】:2020-05-18 20:33:39
【问题描述】:
我正在 Arduino 框架中编写 ESP32。对于我的应用程序,我需要创建一个缓冲区来存储当前和上次访问时的信息。这是我正在尝试做的事情。
//first buffer
char buffer1[4];
//second buffer
char buffer2[8];
void setup {
//setup
}
//buffer1 values will change with each iteration of loop from external inputs
//buffer2 must store most recent values of buffer1 plus values of buffer1 from when loop last ran
for example:
**loop first iteration**
void loop {
buffer1[0] = {1};
buffer1[1] = {2};
buffer1[2] = {3};
buffer1[3] = {1};
saveold(); //this is the function I'm trying to implement to save values to buffer2 in an element-wise way
}
//value of buffer2 should now be: buffer2 = {1,2,3,1,0,0,0,0}
**loop second iteration**
void loop {
buffer1[0] = {2};
buffer1[1] = {3};
buffer1[2] = {4};
buffer1[3] = {2};
saveold();
}
//value of buffer2 should now be: buffer2 = {2,3,4,2,1,2,3,1}
根据我通过在线搜索了解到的情况,我正在尝试制作的“saveold”功能 应该为这些数组操作实现某种形式的 memmove
我尝试将其拼凑起来,但我总是覆盖 buffer2 的值,而不是以某种方式将新值移入,同时保留旧值
这就是我所拥有的:
void saveold() {
memmove(&buffer2[0], &buffer1[0], (sizeof(buffer1[0]) * 4));
}
据我了解,这会将 buffer1 从索引位置 0 开始复制到 buffer2,从索引位置 0 开始,共 4 个字节(其中 1 个字符 = 1 个字节)。
计算机科学不是我的背景,所以也许我缺少一些基本的解决方案或策略。任何指针将不胜感激。
【问题讨论】:
-
你并没有真正移动任何东西。您每次只是从
buffer1复制到buffer2的同一位置。我个人不会费心移动实际数据,而是保留一个标志,告诉您在每次调用时开始复制到哪个字节。但是,如果您真的必须复制,请执行以下操作:memmove(&buffer2[4], &buffer2[0], (sizeof(buffer2[0]) * 4)); memcpy(&buffer2[0], &buffer1[0], (sizeof(buffer1[0]) * 4)); -
选择 C 或 C++,不要同时选择两者。最佳答案取决于语言。
标签: c++ arduino embedded arduino-c++