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
#include
#include
#define __ASSERT_USE_STDERR //定义此宏可使断言从STDERR输出错误信息,并进入一个无限循环
//若不定义,只能使程序进入一个无限循环
#include
#include
void StdIoInit(void);
void DelayMs(uint16_t t)
{
uint16_t i;
for(i=0;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
#include
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");
}
执行结果:
断言代码行:
|
|