调试器手表中的数组为空
Array is empty in debugger watch
当我查看调试器手表时,断点位于 _render
,command
仅包含 0x00
。
这是用于 AVR 处理器。
int main(){
char hello[] = "Hello";
gfx_put_string(5, hello);
}
void gfx_put_string(int length, char* characters){
char command[length+3];
command[0] = 0x00; //cmd
command[1] = 0x06; //cmd
for (int i=0; i<length; i++){
command[i+2] = characters[i];
}
command[length+2] = 0x00; //end with null
_render(length+3, command);
}
希望它包含 0x00, 0x06, H, e, l, l, o, 0x00
。我的代码有什么问题?我该如何解决?
编辑:建议的修复方法是将数组中的第一个字符更改为不是 0x00(空),但没有更改。优化已关闭。 XC8 None (-O0)
虽然在内存中找到了它(?)
所以问题是 command
数组的长度可变,当我将长度设置为 const 时,一切都按预期进行。最终代码如下:
void gfx_put_string(const int length, char* characters){
char command[length+3];
command[0] = 0x00;
command[1] = 0x06; //cmd
for (int i=0; i<length; i++){
command[i+2] = characters[i];
}
command[length+2] = 0x00; //end with null
_render(length+3, command);
}
当我查看调试器手表时,断点位于 _render
,command
仅包含 0x00
。
这是用于 AVR 处理器。
int main(){
char hello[] = "Hello";
gfx_put_string(5, hello);
}
void gfx_put_string(int length, char* characters){
char command[length+3];
command[0] = 0x00; //cmd
command[1] = 0x06; //cmd
for (int i=0; i<length; i++){
command[i+2] = characters[i];
}
command[length+2] = 0x00; //end with null
_render(length+3, command);
}
希望它包含 0x00, 0x06, H, e, l, l, o, 0x00
。我的代码有什么问题?我该如何解决?
编辑:建议的修复方法是将数组中的第一个字符更改为不是 0x00(空),但没有更改。优化已关闭。 XC8 None (-O0)
虽然在内存中找到了它(?)
所以问题是 command
数组的长度可变,当我将长度设置为 const 时,一切都按预期进行。最终代码如下:
void gfx_put_string(const int length, char* characters){
char command[length+3];
command[0] = 0x00;
command[1] = 0x06; //cmd
for (int i=0; i<length; i++){
command[i+2] = characters[i];
}
command[length+2] = 0x00; //end with null
_render(length+3, command);
}