|
想使用malloc()函數但會報錯
錯誤信息如下:
.\at91sam9260-sdram\at91sam9260-sdram.axf: Error: L6915E:Library reports error: __use_no_semihosting_swi was requested, but_sys_open was referenced
可以用的,想不報錯的話,
在usart.c里#pragma import(__use_no_semihosting) 下加了
void _ttywrch(int ch)
{
while((USART1->SR&0X40)==0);//循環發送,直到發送完畢
USART1->DR = (u8) ch;
}
不推薦用微庫,代碼瘦身的代價往往是程序變慢,用微庫還限制的一部分功能,申請堆的大小在頭文件里有限制
就是startup_stm32f10x_hd.s第45行Heap_Size EQU 0x00001000
這個就是設置堆的大小,不過后來沒用malloc,這個函數用多了,就會有太多碎片,萬一申請不了,會出事,用malloc一定要測試函數返回值,
不然用空指針訪問內存,程序會崩潰的,最好自己寫個內存分配方案,分配固定的內存給堆用,原子哥的方案比較好,不會有碎片,我因為用到系統,
自帶內存管理,就沒用,不過沒用過,一用一大堆錯誤,就先用數組代替了,等系統玩熟了,在換。。
|
|