您的位置:首页 > 编程语言 > Go语言

嵌入式开发中logout两种实现方式与原理

2018-03-27 15:04 246 查看
1)如果没有logout头文件,利用#include <stdio.h>库中的printf函数实现
so文件需添加
#include <stdio.h>
    然后定义logout函数如下:
#ifndef __LogOut__
#define LogOut(format,...)  printf(format, ##__VA_ARGS__) 
#endif
printf函数是在windows平台下的库函数,如果要在嵌入式设备中printf是通过串口的方 式,需要重写fputc()和fgetc()函数:
//重定义fputc函数 
int fputc(int ch, FILE *f)
{      
while((USART1->SR&0X40)==0);//循环发送,直到发送完毕   
    USART1->DR = (u8) ch;      
return ch;
}
2)添加logout.h文件,直接编辑好串口函数
宏定义logout函数为uart_printf
        void UART1_printf(char * format, ...);
#define TRACE_FUNC  UART1_printf("[%s-%d]->%s Begin\r\n",__MODULE__,__LINE__,__func__)
#define TRACE_FUNC_END      UART1_printf("[%s-%d]->%s End\r\n",__MODULE__,__LINE__,__func__)
#define TRACE_LINE      UART1_printf("[%s]->%d\r\n",__func__,__LINE__)
#define LogOut      UART1_printf
#define TRACE_FUNC  UART1_printf("[%s-%d]->%s Begin\r\n",__MODULE__,__LINE__,__func__)
#define TRACE_FUNC_END      UART1_printf("[%s-%d]->%s End\r\n",__MODULE__,__LINE__,__func__)
#define TRACE_LINE      UART1_printf("[%s]->%d\r\n",__func__,__LINE__)
#define LogOut      UART1_printf
//并写好串口函数 uart1_printf,根据需要写对应的串口号
        void UART1_printf(char * format, ...)
        {
char * s = 0;
int d = 0, i = 0;
unsigned char ch[sizeof(int) * 2 + 2] = {0};
uart_va_list ap = 0;

uart_va_start(ap, format);

while (* format) 
{
if (* format != '%') 
{
UART_SEND_BYTE(format++);
continue;
}
switch (*(++format)) 
{
case 's':
case 'S':
s = uart_va_arg(ap, char *);
for ( ; *s; s++) 
{
UART_SEND_BYTE(s);
}
break;
case 'c':
case 'C':
UART_SEND_BYTE(uart_va_arg(ap, char));
break;
case 'x':
case 'X':
d = uart_va_arg(ap, int);
for(i = 0; i < sizeof(int) * 2; i++)
{
ch[i] = (unsigned char)(d&0x0f) + '0';
if(ch[i] > '9')
ch[i] += 7; 
d >>= 4;
}

ch[i++] = 'x';
ch[i] = '0';

for(i = sizeof(int) * 2 + 2; i > 0; i--)
UART_SEND_BYTE(&ch[i -1]);
break;

            case 'd':
            case 'D':                
                d = uart_va_arg(ap, int);
                i=0;
                //ch[i++] = d/10000+'0';
                ch[i++] = (d%10000)/1000+'0';
                ch[i++] = (d%1000)/100+'0';
                ch[i++] = (d%100)/10+'0';
                ch[i++] = (d%10)+'0';                
                for(d=0; d<i; d++)
                    UART_SEND_BYTE(&ch[d]);
                break;                            
default:
UART_SEND_BYTE(format);
break;
}
format++;
}
uart_va_end(ap);
}
      

1)或者2)做好后就可以调用LogOut("[%s->%s=%d]\r\n",__MODULE__,__func__,__LINE__);来看程序运行在哪里了!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐