請(qǐng)問(wèn)CH32V103打開(kāi)-flto選項(xiàng)后如何避免_write函數(shù)被優(yōu)化掉?

由于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的代碼密度還是太拉跨了。

這個(gè)問(wèn)題復(fù)現(xiàn)很容易,在CH32V103的EVT中,打開(kāi)USART_Printf例子,工程設(shè)置里面打開(kāi)-flto選項(xiàng)

先clean,然后build,就會(huì)彈出下面的錯(cuò)誤提示。

libg_nano.a(lib_a-writer.o): in function `.L0 ':writer.c:(.text._write_r+0x12): undefined reference to `_write'

EVT的代碼在debug.c文件中實(shí)現(xiàn)了_write函數(shù)。


您好,可通過(guò)在函數(shù)前增加__attribute__((used))語(yǔ)句來(lái)避免該函數(shù)被優(yōu)化,具體寫法如下圖:

130442mnarjugjqpyczgun.png.thumb.jpg



只有登錄才能回復(fù),可以選擇微信賬號(hào)登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频