main.c

uint8_t debugUart = 0;
uint8_t getDebugUart()
{
    return debugUart;
}

void setDebugUart(uint8_t debug)
{
    debugUart = debug ;
    printf("setDebugUart,%d\n",debug);
    Fram_WriteByte(DEBUG_UART,debug);    
}

init.c

debugUart = Fram_ReadByte(DEBUG_UART)

usart.c

void printf_wrapperV(const char* format, va_list args_list)
{
    vprintf(format, args_list);
}

void Log(uint8_t filter ,const char* format, ...)
{
    if(filter>=getDebugUart()){
        va_list marker;
    va_start(marker, format);
    printf_wrapperV(format, marker);
    va_end(marker);
    }    
}

usart.h

#include <stdarg.h>  
#include "stdio.h"  

void printf_wrapperV(const char* format, va_list args_list);
void Log(uint8_t filter,const char* format, ...);

enum DebugType
{    
    VERBOSE,
    DEBUG,
    WARNING
};

使用

Log(VERBOSE,"...");
Log(DEBUG,"...");
Log(WARNING,"...");