【问题标题】:Optimized way of Error handling in C EmbeddedC Embedded 中错误处理的优化方式
【发布时间】:2011-09-01 14:13:38
【问题描述】:

基本问题,但想知道优化的方法。它是一个代码块,用于关闭多个进程的关闭例程。在所有情况下,它都应该尝试关闭所有进程和阶段,但保留失败值以返回。

Error_code result=PASS;
<some code>
for i 1 to 10
 if((result = operation())!=PASS)
   PRINT "FAILURE"
 done    
 if((result = operation())!=PASS)
   PRINT "FAILURE"
for i 1 to 10
 if((result = operation())!=PASS)
   PRINT "FAILURE"
 done    

return result;

现在的问题是如果最后一次迭代是通过,那么它返回一个PASS,因为操作应该在所有10次迭代中运行,如果失败,我们只需要返回错误代码。由于它实际上可以有 100 次失败,所以我这样编写代码:-

Error_code result=PASS;
Error_code tresult=PASS;
for i 1 to 10
 if((result = operation())!=PASS) {
   tresult = result;
   PRINT "FAILURE"
 }
 if((result = operation())!=PASS) {
   tresult = result;
   PRINT "FAILURE"
}
for i 1 to 10
 if((result = operation())!=PASS)
  tresult = result;
  PRINT "FAILURE"
 done    

if(tresult != result)
 result = tresult;

return result;

它是唯一优化的解决方案,还是我们可以在这方面做得更好。我不能使用标志,因为它有超过 100 个错误变量.. 建议更好的方法..

【问题讨论】:

    标签: c optimization embedded


    【解决方案1】:

    您需要为链表或数组中的每个错误代码动态分配空间,然后将列表传递回任何需要知道结果的地方。

    您可以为每个正在关闭的进程设置一个代码,并在其中包含“正常”的情况,或者您可以将进程 ID 和错误代码一起包含,并且仅在出现错误时才包含它们。

    例如:

    errorList = NULL;
    for i 1 to 10
     if((result = operation())!=PASS) {
      appendToList(errorList, i, result)
     }
    if(errorList != NULL) {
     result = ERROR;
    } else {
     result = PASS;
    }
    return result;
    

    (注意:虽然你说你是用 C 编写的,但你的代码 sn-p 看起来更像是伪代码,所以我在这里是这样处理的。你需要编写适当的代码来追加错误代码添加到您的列表中)。

    【讨论】:

      【解决方案2】:

      如果您只需要知道是否有任何迭代失败,您可以使用++ 运算符:

      int result = 0;
      
      for i 1 to 10
      if(operation() != PASS)
          PRINT "FAILURE"
          result++;
      done    
      
      return (result == 0 ? PASS : ERROR);
      

      【讨论】:

        猜你喜欢
        • 2016-01-08
        • 2011-08-25
        • 1970-01-01
        • 1970-01-01
        • 2012-06-06
        • 1970-01-01
        • 2016-03-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多