gpt4 book ai didi

c - 为什么这些嵌入式 C 代码的安排表现如此不同?

转载 作者:太空狗 更新时间:2023-10-29 15:55:43 25 4
gpt4 key购买 nike

背景

我正在使用基于 8052 的微 Controller 。我连接了一个 LCD 和编码器轮。用户可以通过旋转并按下编码轮来浏览 LCD 上显示的菜单。

编码轮的旋转是基于中断的。

编码器轮的旋转方向 (encoder_turn) 在编码器中断内部设置。

我在循环内调用 update_lcd()

新响应代码

void update_lcd()                           
{

//ENCODER TURN
switch(encoder_turn)
{
case RIGHT:
lcd_clear();
next_screen();
break;
case LEFT:
lcd_clear();
previous_screen();
break;
default:
break;
}
}

void next_screen()
{
if(current_test_screen < screen5)
{
current_test_screen++;
}

draw_current_test_screen();
}

void draw_current_test_screen()
{
switch(current_test_screen)
{
case screen1:
draw_screen1();
break;
case screen2:
draw_screen2();
break;
case screen3:
draw_screen3();
break;
case screen4:
draw_screen4();
break;
case screen5:
draw_screen5();
break;
default:
break;
}
}

旧的无响应代码

void update_lcd()                           
{

//ENCODER TURN
switch(encoder_turn)
{
case RIGHT:
lcd_clear();
next_screen();
break;
case LEFT:
lcd_clear();
previous_screen();
break;
default:
break;
}

switch(current_test_screen)
{
case screen1:
draw_screen1();
break;
case screen2:
draw_screen2();
break;
case screen3:
draw_screen3();
break;
case screen4:
draw_screen4();
break;
case screen5:
draw_screen5();
break;
default:
break;
}


}

void next_screen()
{
if(current_test_screen < screen5)
{
current_test_screen++;
}
}

问题

为什么一个有响应而另一个完全没用?

当我说响应式时,我指的是当我旋转编码器时屏幕变化是响应式的。这两种方法都“有效”,但从使用的角度来看,一种方法是 Not Acceptable 。

最佳答案

除了一个非常细微的差别外,这两段代码几乎是等价的。

如果您尝试重构旧代码以使其看起来更像新代码,您会发现旧代码进行了一次额外的函数调用。仔细看区别:

void update_lcd()                           
{
//ENCODER TURN
switch(encoder_turn)
{
case RIGHT:
lcd_clear();
next_screen();
break;
case LEFT:
lcd_clear();
previous_screen();
break;
default:
draw_current_test_screen(); // <--- your new code omits this call
break;
}
}

尝试使用您的新代码并添加该行,看看它是否会导致无响应问题。

关于c - 为什么这些嵌入式 C 代码的安排表现如此不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10420823/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com