我是一个C新手,在尝试将我的next_frame
存储在一个变量中时遇到了一个问题。任何帮助都是很好的,因为我想这可能是我遗漏的一些简单的东西。
如果我只是改变以下内容,它就可以正常工作,只有当我试图将next_frame
存储在变量中时,它才不能编译。
// Doesn't compile
oled_write_raw_P(next_frame, FRAME_SIZE);
// Compiles
oled_write_raw_P(frames[abs((FRAME_COUNT - 1) - current_frame)];, FRAME_SIZE);
完整代码
#define FRAME_COUNT 5 // Animation Frames
#define FRAME_SIZE 256
#define FRAME_DURATION 200 // MS duration of each frame
// Variables
uint32_t timer = 0;
uint8_t current_frame = 0;
char next_frame;
static void render_animation(void) {
static const char PROGMEM frames[FRAME_COUNT][FRAME_SIZE] = {
// Images here, removed for example
};
// If timer is more than 200ms, animate
if (timer_elapsed32(timer) > FRAME_DURATION) {
timer = timer_read32();
current_frame = (current_frame + 1) % FRAME_COUNT;
next_frame = frames[abs((FRAME_COUNT - 1) - current_frame)];
// Set cursor position
oled_set_cursor(128, 0);
// Write next frame
oled_write_raw_P(next_frame, FRAME_SIZE);
}
}
错误如下:
错误:从'const char *'赋值给'char',从指针生成整数,但没有转换[-Weror = int转换] next_frame = frames[abs((FRAME_COUNT - 1)- current_frame)];
错误:传递'oled_write_raw_P'的参数1从整数生成指针而不进行转换[-Werror=int-conversion] oled_write_raw_P(next_frame,FRAME_SIZE);
1条答案
按热度按时间7z5jn7bk1#
行
没有任何意义。
您要为其赋值的变量
next_frame
的类型为char
。但是,您要为其赋值表达式其中decays指向指向子数组第一个元素的指针,因此表达式的计算结果为
const char *
类型的值。我不太清楚您想要完成什么,但我猜您的问题的解决方案是将
next_frame
的类型更改为const char *
,以便类型匹配。至: