1、Redlib
NXP自己的(非GNU) ISO C90標准C庫,帶有一些C99擴展(MCUXpresso IDE默認將在C項目中使用Redlib庫)。如果你需要更小的應用程序規模,並且不需要C99或C++庫的額外功能,建議使用Redlib,它通常可以生成更小的應用程序。
雖然Redlib基本上是一個C90標准的C庫,但它實現了許多擴展,包括一些來自C99規范的擴展:
- 單精度數學函數:提供了一些math.h函數(如sinf()和cosf())的單精度實現。
- stdbool.h:提供了C99 stdbool .h頭的實現。
- itoa:itoa()是一個非標准庫函數,許多其他工具鏈都提供了它來將整數轉換為字符串。為了方便移植,提供了這個函數的實現,可以通過stdlib.h訪問。
2、Newlib和NewlibNano
Newlib 是GNU C / C++庫。提供了完整的C99和C++庫支持,但代價是應用程序中的代碼尺寸更大(在某些情況下,要大得多)。
NewlibNano是為嵌入式而優化的GNU C/ C++庫的一個版本,與使用標准版本的Newlib相比,對於C和C++項目,使用NewlibNano可以極大地減少應用程序的大小。
Newlib和NewlibNano對比:
- NewlibNano對大小進行了優化。
- printf和scanf家族的例程已經在NewlibNano中重新實現,以消除對浮點輸入/輸出處理代碼的直接依賴。需要使用這些函數處理浮點值的項目現在必須在鏈接期間顯式地請求該特性。
- NewlibNano中的printf和scanf家族例程只支持C89標准中定義的轉換說明符。這在小內存占用和完整功能格式化的輸入/輸出之間提供了良好的平衡。
- NewlibNano刪除了printf/scanf類例程(如iprintf/iscanf等)的冗余整數實現。這些函數現在作為標准例程的別名。
- 在NewlibNano中,只有未寫入的緩沖數據會在退出時刷新。打開的數據流不會關閉。
- 在NewlibNano中,動態內存分配器被重新實現。