【发布时间】:2013-12-09 15:57:48
【问题描述】:
我在嵌入式系统中使用 C 语言进行了大量编程。不久前,我正在向同事解释我的代码,以减少我们的总线因素。我们开始讨论我构建代码的方式。我的代码往往更像这样:
while(1){
//read the inputs
input1 = pin4
input2 = pin5
//define the mode
if (input1) mode = CHARGE;
else if (input2) mode = BOOST;
else mode = STANDBY;
//define outputs
if (mode == CHARGE) output1 = 1;
else output1 = 0;
if (mode == BOOST) output2 = 1;
else output2 = 0;
}
他的代码往往更像这样:
while(1){
//handle first mode
if (input1){
mode = CHARGE;
output1 = 1;
output2 = 0;
}
//handle second mode
else if (input2){
mode = BOOST;
output1 = 0;
output2 = 1;
}
}
两者在语义上是相同的,但是从 A 到 B 的方式完全不同。
本质上,我的结构是确保任何给定的变量只在代码中的一个位置尽可能地设置。显然,在某些情况下这是不可能的,例如长串顺序计算的结果。但总的来说,我发现这使我的代码更容易调试。如果某个特定变量的值有问题,那么该问题只能存在于一个地方。如果我发现我需要在一个变量和另一个变量之间插入中间标志,那么如果只有一个地方可以做到这一点会容易得多。
(我不知道我是怎么走到这一步的。我以前不习惯用这种方式编程。我想我是从很多 VHDL 痛苦中学到的,早在那天。)
我想知道,这两种结构化代码的方法是否有名称?进一步阅读它们的优缺点会很有趣。
【问题讨论】: