arrays - 从程序中读取字节
问题描述
我正在尝试编写一个简单的程序(作为更复杂程序的前导),它将字节数组存储到 progmem,然后读取并打印该数组。我已经浏览了一百万个在线博客/论坛帖子,并认为我做的一切都很好,但我仍然得到完全的胡言乱语作为输出。
这是我的代码,任何帮助将不胜感激!
void setup() {
byte hello[10] PROGMEM = {1,2,3,4,5,6,7,8,9,10};
byte buffer[10];
Serial.begin(9600);
memcpy_P(buffer, (char*)pgm_read_byte(&hello), 10);
for(int i=0;i<10;i++){
//buffer[i] = pgm_read_byte(&(hello[i])); //output is wrong even if i use this
Serial.println(buffer[i]);
}
}
void loop() {
}
如果我使用memcpy
,我会得到输出:
148
93
0
12
148
93
0
12
148
93
如果我buffer = ....
在 for 循环中使用语句(而不是memcpy
):
49
5
9
240
108
192
138
173
155
173
解决方案
你想的两个量级太复杂了。
memcpy_P
需要一个源指针、一个目标指针和一个字节数。PROGMEM 指针就是数组。所以,你的memcpy_P
线路应该喜欢
memcpy_P (buffer, hello, 10);
而已。
memcpy
(没有“P”)将无法访问程序存储器并从数据 RAM 复制内容。那不是你想要的。
推荐阅读
- swiftui - 在 SwiftUI 中导航到不同的视图
- angular - Cannot have UI updated when data received through socket.io in Angular
- java - Duplicating Elements of 1D Array into 2D Array
- mysql - Spring JPA doesn't create my entities on mysql
- r - Combine two dataframes by row (irrespective of columns names)
- python - Python checking for empty list on a Path subclass is returning 'AttributeError' object has no attribute
- python - django-ckeditor 代码片段没有响应
- prometheus-alertmanager - 如何在 Prometheus Alertmanager 中为 FIRING 和 RESOLVED 状态提供不同的消息?
- dynamics-gp - 如何使用 Dynamics GP 插件执行异步任务?
- ios - 如何快速制作可折叠/可扩展的视图