1 在設置svc模式好之後調試時出現了一下的問題
Make al
Arm-linux-gcc -g -c start.o -o strart.S
Arm-none-linux-gnueabi-gcc;start.o:no such file or directory
Arm-none-linux-gnueabi-gcc;no input file
Make:*** [start.o]錯誤1
經過檢查發現錯誤:
在編譯時把 arm-linux-gcc -g -c $@ -o $^
修改成 arn-linux-gcc -g -c $^之後問題解決
二:在編寫makefile文件時要時刻注意空格鍵與tab鍵到底用的是那個;我遇到的是在以下代碼中
A all: start.o
B arm-linux-ld -Tgboot.lds -o gboot.elf $^
B arm-linux-objcopy -O binary gboot.elf gboot.bin
A %.o : %.S
B arm-linux-gcc -g -c $^
A %.o : %.c
B arm-linux-gcc -g -c $^
C .PHONY: clean
D clean:
B rm *.o *.elf *.bin
經過本人驗證:
在A處前面的空格要一空格鍵打出,不然就會出現錯誤
在B處的空格要以tab鍵打出,不然顯示的是 ‘遺漏分隔符’
在C處tab鍵和空格鍵那個都不報錯,但若用了tab鍵clean將不起作用
在D處雖然tab鍵和空格鍵都不報錯,但
在語句裏面空格鍵那個都行
三:在循環點亮led時我寫的以下延時程序雖無錯誤但無法點亮led;
Int time;
dely(time)
{
for(;time>0;time--)
;
}
當我修改到以下程序時就可以點亮了:
dely(int time)
{
for(;time>0;time--)
;
}
總結:用C編寫相關的功能函數時,若將變量定義在函數外面,有可能對實現該功能造成影響!
四:一個細節,一旦粗心就會出錯,在使用或配置寄存器時要看看之前宏定義時的方式 比如:#define NFSTAT (volatile unsigned char *)0x70200028
在使用時要用*(NFSTAT)配置或傳參
而#define *(NFSTAT (volatile unsigned char *)0x70200028)
使用時要用NFSTAT配置或傳參
不然可能會出現操作數無效或無法計算的錯誤
五:出現underfined reference to ‘xxxxxx’的問題
在建立串口控制檯時,第一由於是初次在文件中套文件 即一個文件上級makefile要鏈接下級makefile所以會出現問題,
我出現的問題是第一次有一個函數書寫錯誤導致編譯不通過,但改正之後還是同樣的錯誤!經過不斷地測試;我發現當我挨個將每個文件或出現問題的文件make clean 即清除一下之後就ok了,而且如果不這樣做,在上級直接make clean是不會clean掉下級中的文件的,然後再make,一般就好了!
六:linux編譯時遇到警告:檢測到時鐘錯誤,您的創建可能不完整
在root的終端輸入find . -type f -print | xargs touch即可。。。
在有的網頁上看到find . -type f -exec touch{}\;這個我一回車馬上提示exec缺少參數,不知道是怎麼回事,不過現在先有個感觀上的認識吧,然後慢慢的深究,一定能找到原因的。。。