单片机C程序断言(assert)测试程序
来源: 芯艺工作室
本站广告
  ENC28J60+uIP DHCP动态获取IP及UDP广播服务端示例
  ENC28J60+uIP 基于TCP的MODBUS IO示例
  C720H5上实现MODBUS远程IO
  ENC28J60+uIP HTTP GET方式将温度数据上传到web服务器
  FM1702读写S50(也叫M1)卡相关资料

main.c文件:

/********************************
  单片机C程序断言(assert)测试程序 
  文件名:main.c
  编译:WinAVR-20070122

  硬件:CA-M8X  
      配置:外部MHz
      打开:S6(1,2)  S5(5,6)
  
  芯艺设计室 2004-2007  版权所有 
  转载请保留本注释在内的全部内容
  WEB: http://www.chipart.cn
  Email: changfutong@sina.com
*******************************/
#include <avr/io.h>
#include <util/delay.h>
#include <stdio.h>

#define __ASSERT_USE_STDERR   //定义此宏可使断言从STDERR输出错误信息,并进入一个无限循环
                              //若不定义,只能使程序进入一个无限循环
#include <assert.h>
#include <stdint.h>

void StdIoInit(void);

void DelayMs(uint16_t t)
{
  uint16_t i;
  for(i=0;i<t;i++)
    _delay_loop_2(250*4);
}

int main(void)
{
  uint8_t i=7;
  StdIoInit();  
  while(1)
  {
    i--;
    assert(i);//循环两次后断言生效,使程序停止
    DelayMs(500);  
    printf("hello%d\n",i);
  }
  return 0;
}

/******************************************************
  断言只在调试时使用:
  当生成发布版本时可指定编译选项-DNDEBUG 来忽略断言
  
  在makefile中心下方式指定:
#---------------- Compiler Options C ----------------
... ...
CFLAGS = -g$(DEBUG)
CFLAGS += -DNDEBUG  
... ...
******************************************************/


uart.c文件:

/****************************************
文件名:uart.c
****************************************/
#include <avr/io.h>
#include <stdio.h>

static int uart_putchar(char c, FILE *stream);

static FILE mystdout = FDEV_SETUP_STREAM(uart_putchar, NULL, _FDEV_SETUP_WRITE);

static int uart_putchar(char c, FILE *stream)
{
  if (c == '\n')
    uart_putchar('\r', stream);
  loop_until_bit_is_set(UCSRA, UDRE);
  UDR = c;
  return 0;
}

void StdIoInit(void)
{
  UCSRB=0;
  UBRRH=0;
  UBRRL=25;      //9600   

   UCSRB=_BV(TXEN);  
  stdout = &mystdout;
  stderr = &mystdout;
  printf("Uart初始化完成!\n");
}

执行结果:




断言代码行:




声明:芯艺工作室(http://www.chipart.cn)保留所有权力,转载请注明出处!

芯艺工作室    蒙ICP备06005492号

Copyright© 2004-2020 ChipArt Studio All Rights Reserved