《测试驱动的嵌入式C语言开发》—— Unity工具篇之CEXCEPTION

  • CException介绍

CException是Ç语言中的简单异常处理。它比成熟的C ++异常处理快得多,但却失去了一些灵活性。它可以移植到任何支持的setjmp / longjmp的的平台。

主库只有两个小文件(CException.h和CException.c),如果要自定义其行为,可能还需要一个配置文件。下载软件包时,您还会获得一些文档和一些我们用来验证一切正常工作的测试。

还有一个存根,您可以定义一个函数,用于了CException在没有主时调用的try ... catch ...的一个回退机制,这样应用程序就不会盲目地进入随机存储器。

有大量的异常框架使用类似的setjmp / longjmp的方法......未来可能会有更多。不幸的是,当我们开始上一个嵌入式项目时,所有存在的(a)中不支持多个任务(因此多个堆栈)或(b)中比我们真正想要的更复杂。

下载了CException

  • 为什么使用了CException

1>它是ANSI C,优于传递错误代码;

2>您想要一些简单的东西...... CException会抛出一个ID。您可以将这些ID定义为您喜欢的任何内容。您甚至可以选择该项目的编号类型。但就目前而言。我们对传递对象或结构或字符串不感兴趣......只是简单的错误代码。

3>性能......可以为单任务或多任务配置CException。在单任务中,setjmp / longjmp调用之后的开销非常小(已经很快)。在多任务处理中,您唯一的开销是确定任务ID的速度。

  • 它可靠吗?

了CException已经在许多平台上进行了测试(IAR4,IAR5,GCC,铛)。我们使用统一作为测试框架。此外,还有一些规则需要遵循......只要您遵循规则,它就非常强大并可靠。

  • 备选

下面是一些“gabillion”异常处理框架:

* Adam M. Costello的cexcept - 做得很好。感觉有点像c ++,允许自定义类型。如果它在我开始这个项目之前就存在,我的可能就不存在了。尽管如此,使用起来还是有点复杂,多任务处理更加困难。

* Doug Jone的异常处理 - 小。不同的语法。没有多任务。

  • 例子

以前的错处处理方式:

BOOL ProductionLine_DoWholeBunchOfStuff( int a ) {

  BOOL retVal = FALSE;

  if (Worker_DoStepA(a) == SUCCESS) {
    if (Worker_DoStepB(a+1) == SUCCESS) {
      if (Worker_DoStepC(a+2) == SUCCESS) {
        retVal = TRUE;
      }
    }
  }
  return retVal;
}

了CException的错误处理方式:

void ProductionLine_DoWholeBunchOfStuff( int a ) {

  CEXCEPTION_T e;

  Try {
    Worker_DoStepA(a);
    Worker_DoStepB(a+1);
    Worker_DoStepC(a+2);
  }
  Catch(e) {
    SystemLogger_Error(e);
  }
}

void Worker_DoStepA( int a ) {

  if (a < 100) {
    Throw( BOOM_GOES_THE_DYNAMITE );
  }

  // do something useful
}

// --- Tests ---
void test_ProductionLine_DoWholeBunchOfStuff( void ) {

  Worker_DoStepA_Expect( 50 );
  Worker_DoStepB_ExpectAndThrow( 51, BOOM_GOES_THE_DYNAMITE );
  SystemLogger_Error_Expect( BOOM_GOES_THE_DYNAMITE );

  ProductionLine_DoWholeBunchOfStuff( 50 );
}

void test_Worker_DoStepA( void ) {

  CEXCEPTION_T e;

  Worker_DoStepA( 101 );
  Worker_DoStepA( 100 );

  Try {
    Worker_DoStepA( 99 );
    TEST_FAIL_MESSAGE( "Should have thrown!" );
  }
  Catch(e) {
    TEST_ASSERT_EQUAL( BOOM_GOES_THE_DYNAMITE, e );
  }
}

测试驱动嵌入式C语言开发》是一本探讨嵌入式C语言开发测试驱动开发TDD)方法的书籍。TDD是一种先写测试用例,再编写代码实现这些测试用例的开发方式,其主要目的是保证代码的质量和可维护性。 这本书主要通过实例演示如何实现嵌入式C语言项目的测试驱动开发过程。它介绍了如何使用Unity测试框架和CMock模拟框架来进行单元测试,使得嵌入式软件开发过程中的测试更加简单且高效。书中还详细讨论了如何使用不同的测试策略和设计模式来提高代码的可测性和可维护性。 此外,书中还介绍了如何使用版本控制系统和持续集成工具来增强测试驱动嵌入式C语言开发过程。通过使用这些工具开发人员可以更好地管理代码库的版本,并及时发现和修复潜在的问题。 《测试驱动嵌入式C语言开发》适合具有一定嵌入式开发基础的读者,特别是那些希望学习如何应用测试驱动开发方法来提高嵌入式软件质量的开发人员。这本书内容丰富,实例详细,可以帮助读者更好地理解和掌握测试驱动开发方法在嵌入式C语言开发中的应用。 总之,这本书通过具体实例和详细讲解,向读者展示了如何使用测试驱动开发方法进行嵌入式C语言开发,并提高软件质量和可维护性。阅读本书可以使开发人员更好地理解和掌握测试驱动开发的技巧和方法,从而在嵌入式开发中取得更好的效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值