由于RISC-V代碼密度低,想盡量壓縮代碼體積。采取了以下措施:
優(yōu)化等級(jí)-Os體積優(yōu)化,打開(kāi)壓縮指令RVC,鏈接器增加了以下選項(xiàng)
--gc-sections --specs=nano.specs --specs=nosys.specs
效果還是不理想,使用-flto選項(xiàng)打開(kāi)Link-time optimizer以后代碼體積減少不少,不過(guò)報(bào)_write函數(shù)找不到。
libg_nano.a(lib_a-writer.o): in function `.L0 ':writer.c:(.text._write_r+0x12): undefined reference to `_write'
看起來(lái)是_write函數(shù)被優(yōu)化掉了,這個(gè)_write函數(shù)是為了使用printf函數(shù)實(shí)現(xiàn)的,代碼中有,不加-flto選項(xiàng)正常。
其它項(xiàng)目都是重寫fputc,WCH是重寫_write函數(shù),如何在打開(kāi)-flto選項(xiàng)后如何避免_write函數(shù)被優(yōu)化掉呢?
或者是否還有其它方法可以用來(lái)減小代碼體積?
同樣功能的源代碼在ARM上面即使使用速度優(yōu)化,F(xiàn)LASH空間也十分充足,RISC-V的代碼密度還是太拉跨了。