調試模塊
#include "io.h"
void put_c(uint8_t ch)
{
}
void put_str(uint8_t *str)
{
while(*str)
put_c(*str++);
}
uint32_t Exp_10(uint8_t N)
{
uint32_t Temp=1;
if(N==0)
return 1;
while(N--)
{
Temp*=10;
}
return Temp;
}
void put_d(uint32_t Num)
{
uint32_t Temp=Num;
uint8_t Length=0,Cnt;
if(Num==0)
{
put_c('0');
return;
}
while(Temp)
{
Length++;
Temp/=10;
}
Temp=Num;
for(Cnt=0;Cnt<Length;Cnt++)
{
put_c('0'+Temp/Exp_10(Length-Cnt-1));
Temp%=Exp_10(Length-Cnt-1);
}
}
void put_h(uint32_t Num)
{
uint8_t Temp;
uint8_t Cnt,flag_0=0;
put_str((uint8_t*)"0x");
if(Num==0)
{
put_c('0');
return ;
}
for(Cnt=0;Cnt<8;Cnt++)
{
Temp=(Num>>28)&0x0f;
Num<<=4;
if(flag_0==0)
{
if(Temp==0)
continue;
flag_0=1;
if(Temp>9)
put_c('A'+Temp-0xA);
else
put_c('0'+Temp);
}
else
{
if(Temp>9)
put_c('A'+Temp-0xA);
else
put_c('0'+Temp);
}
}
}
void put_b(uint32_t Num)
{
uint8_t Cnt,flag_0=0;
put_str((uint8_t*)"bin:");
for(Cnt=0;Cnt<32;Cnt++)
{
if(Num>>31)
{
put_c('1');
flag_0=1;
}
else
{
if(flag_0)
put_c('0');
}
Num<<=1;
}
}
void De_print(const uint8_t* Format,...)//s:輸出字符串,d:輸出十進制數字,b:輸出二進制數字,h:輸出十六進制數字
{
va_list ap;
va_start(ap,Format);
while(*Format)
{
switch(*Format++)
{
case 's':put_str(va_arg(ap,uint8_t*));break;
case 'd':put_d(va_arg(ap,uint32_t));break;
case 'b':put_b(va_arg(ap,uint32_t));break;
case 'h':put_h(va_arg(ap,uint32_t));break;
}
}
va_end(ap);
}
|