lk中的dprintf實現

2021-07-22 18:00:37 字數 964 閱讀 2555

在lk中我們一般通過dprintf來列印log,如下所示

dprintf(info, " 0x%x", t->tls[i]);

其中info表示log的級別,lk中總共有三種級別

/* debug levels */

#define critical 0

#define always 0

#define info 1

#define spew 2

繼續看dprintf的實現

#define dprintf(level, x...) do } while (0)

發現如果你要列印的級別小於debuglevel,log才會被列印出來

#if defined(debug)

#define debuglevel debug

#else

#define debuglevel 2

#endif

可以看到如果沒有定義debug的話,debuglevel 預設等於2,也就是所有的log都能印出來

_dprintf的實現如下:

int _dprintf(const char *fmt, ...)

log具體是呼叫dputs來印出來的,我們繼續看看其實現

#define dputs(level, str) do } while (0)

向上面一樣,也是要判斷log level,繼續呼叫 _dputs來印log,_dputs就是具體平台的實現了,我們看乙個已經實現的例子。

int _dputs(const char *str)

return 0;

}通過乙個while 迴圈將字串中的字元乙個乙個通過_dputc列印出來

void _dputc(char c)

#define reg8(addr) ((volatile uint8_t *)(addr))

可以看到就是只要將字串寫到uart的暫存器中,hw就會自動將字元列印出來

lk中中斷的處理flow

在li的crt0.s 中會定義中斷的入口。例如如果是irq中斷會呼叫arm irq start breset barm undefined barm syscall barm prefetch abort barm data abort barm reserved barm irq barm fiq...

lk中的bio機制 2

bio中除了可以使用真實的block dev,還可以使用memory中的block dev,這樣每次可以讀寫block count 的資料,加快讀寫的速度。int create membdev const char name,void ptr,size t len create membdev會建立...

高通LK中GPIO的配置和使用

高通 lk中的gpio配置函式定義 void gpio tlmm config uint32 t gpio,uint8 t func,uint8 t dir uint8 t pull,uint8 t drvstr,uint32 t enable define gpio config addr x t...