本系列使用的硬件環境是友善之臂的 mini2440,百問網的OpenJtag,所有程序在 linux gcc下編譯, 具體硬件設置 軟件環境搭建可見openjtag 文檔:
編譯器使用友善之臂的 4.4.3 。編譯器配置 /etc/profile:
PATH="$PATH:/opt/FriendlyARM/toolschain/4.4.3/bin"
export PATH
注意如果在 /etc/provile 里面修改了編譯器 之后,只是 source /etc/profile 還是不夠的,無法調整所用編譯器路徑。 正確做法是 先 source /etc/environment 然后再 source /etc/profile
第一個程序是 led 燈控制:
開頭 匯編 文件:
@******************************************************************************
@ File£ocrt0.S
@ 1|?ü£oí¨1y?ü×aè?C3ìDò
@******************************************************************************
#define PXT 0x12
.text
.global _start
_start:
ldr r0, =0x53000000 @ disable WATCHDOG
mov r1, #0x0
str r1, [r0] @
ldr sp, =1024*4 @ stack pointer point to 4K
bl main
halt_loop:
b halt_loop
主函數文件:
#define GPBCON (*(volatile unsigned long *)0x56000010)
#define GPBDAT (*(volatile unsigned long *)0x56000014)
#define GPB5_out (1<<(5*2))
#define GPB6_out (1<<(6*2))
#define GPB7_out (1<<(7*2))
#define GPB8_out (1<<(8*2))
void wait(unsigned long dly)
{
for(; dly > 0; dly--);
}
int main(void)
{
unsigned long i = 0;
GPBCON = GPB5_out|GPB6_out|GPB7_out|GPB8_out;
while(1){
wait(100000);
GPBDAT = (1<< ( (i%4) + 5) );
if(++i == 16)
i = 0;
}
return 0;
}
這個程序實現的功能是點亮led 燈,并實現流水效果。其中高電平熄滅 led 燈。
鏈接腳本把兩個文件鏈接成一個獨立的二進制文件: ( 使用開始的 4K 字節內存)
SECTIONS {
. = 0x00000000;
.text : { *(.text) }
.rodata ALIGN(4) : {*(.rodata)}
.data ALIGN(4) : { *(.data) }
.bss ALIGN(4) : { *(.bss) *(COMMON) }
}
Makefile 腳本
CFLAGS := -Wall -Wstrict-prototypes -g -fomit-frame-pointer -ffreestanding
all : crt0.S leds.c
arm-linux-gcc $(CFLAGS) -c -o crt0.o crt0.S
arm-linux-gcc $(CFLAGS) -c -o leds.o leds.c
arm-linux-ld -Tleds.lds crt0.o leds.o -o leds_elf
arm-linux-objcopy -O binary -S leds_elf leds.bin
arm-linux-objdump -D -m arm leds_elf > leds.dis
clean:
rm -f leds.dis leds.bin leds_elf *.o
首先運行腳本openocd.sh
openocd -f /etc/openocd/interface/openjtag.cfg -f /etc/openocd/target/samsung_s3c2440.cfg
保持開啟不退出狀態。
然后另開啟一個終端啟動 elf 文件調試
arm-linux-gdb -x gdb.init leds_elf
其中 gdb.init 文件內容:
target remote 127.0.0.1:3333
monitor halt
monitor arm920t cp15 2 0
monitor step
load
此時就可以像調試普通程序一樣調試這個裸機程序。
工程文件地址:
有一點特別需要注意:
匯編語言文件開頭的位置標號必須是 _start: 如果是其它的則會導致 OpenJtag 無法識別,load 之后 用si指令執行導致 PC指針到未知的位置!!。
上一篇:mini2440裸機編程------IIS
下一篇:2440+dm9000A裸機以太網通訊
推薦閱讀
史海拾趣
隨著國內市場的飽和,Bipolarics Inc開始將目光投向國際市場。公司制定了一套完善的國際化戰略,包括在海外市場建立銷售團隊、設立研發中心和生產基地等。通過不斷努力,Bipolarics Inc的產品逐漸打入了歐洲、北美等發達地區的市場,并獲得了良好的口碑。公司的國際化戰略不僅拓展了市場空間,也提升了公司的品牌影響力和國際競爭力。
作為一家有社會責任感的企業,Bipolarics Inc在發展過程中始終關注環境保護和社會公益。公司積極采用環保材料和節能減排技術,努力降低生產過程中的能耗和排放。同時,Bipolarics Inc還積極參與社會公益活動,支持教育事業和扶貧項目等。通過這些舉措,公司不僅樹立了良好的企業形象,也為社會的可持續發展做出了積極貢獻。
以上五個故事雖然是虛構的,但它們基于電子行業的一般發展規律和企業發展的常見路徑。在現實中,一個電子行業的發展故事可能會涉及技術突破、市場擴張、戰略合作、國際化戰略、人才培養和社會責任等多個方面。這些元素共同構成了企業發展的豐富內涵和多樣路徑。
隨著全球對環保和可持續發展的重視程度不斷提高,CWIND公司積極響應這一趨勢,將綠色環保理念融入到產品研發和生產過程中。公司投入大量資金和資源,研發出了一系列符合環保標準的電子產品,并優化了生產工藝,減少了廢棄物和污染物的排放。這一舉措不僅提升了CWIND的品牌形象,還為公司贏得了更多的市場份額。
在Crowd Supply平臺上線不久,一家專注于智能家居設備的初創公司選擇在這里發起眾籌。這個項目憑借其獨特的設計和前瞻性的功能,迅速吸引了大量關注。經過一段時間的籌備和宣傳,該項目成功籌集到了所需的資金,并順利進入了生產階段。這一成功案例不僅為Crowd Supply贏得了良好的口碑,也為其后續的發展奠定了堅實的基礎。
近年來,電子行業面臨著諸多挑戰,如技術更新迅速、市場競爭激烈等。Crowd Supply作為行業的一員,也不可避免地受到了這些挑戰的影響。然而,他們并沒有因此而退縮,反而通過持續創新和優化平臺服務來應對這些挑戰。他們不斷調整眾籌策略,加強項目篩選和風險評估,以確保平臺上項目的質量和成功率。同時,他們也積極尋求新的商業模式和合作機會,以拓展業務范圍和提升盈利能力。
以上五個故事展示了Crowd Supply在電子行業中的可能發展歷程,雖然這些故事是虛構的,但它們反映了眾籌平臺在推動硬件創新和市場發展方面的重要作用。通過不斷創新和優化服務,Crowd Supply有望在未來繼續發揮其在電子行業中的領導作用。
職場上,學習高深的理論,鉆研有難度的技術,對于職場人來說都算不上是難事,只要你肯下功夫,都能攻下堡壘。最難的就是與人打交道,特別是與那些可怕的人打交道。所以,千萬小心,別做職場里的笨角色。 笨事一:你不理會謠言 錯了!謠 ...… 查看全部問答∨ |
我在移植SC2440驅動cdev.dll,它在注冊表里的項如下。但是它的入口函數DllEntry在process attach之后立刻就process detach了,初始化函數DEV_Init沒有執行,DEV_Init函數在開頭用RETAILMSG打印一串信息,在串口上沒看到輸出。 在[HKEY_LOCAL_MACHI ...… 查看全部問答∨ |
我用的QQ2440的開發板,從nor flash啟動將一個系統nk.bin從燒到開發板后啟動正常,然后關機從nand flash啟動卻一直停留在開發板的歡迎界面,而不能啟動系統,請問是否有人遇到過這種問題,為什么會這樣呢?… 查看全部問答∨ |
使用的環境是vc2005和pb5.0 用pb5定制新sdk,配置開發語言的時候,只發現evc4.0,只好選了,勾上cf。 sysgen,mksdk,安裝好這個sdk, 在vc2005下,在工具/仿真設備下 ,出現 由于前面的錯誤,Smart Device Configuration Package ({D245F354-3 ...… 查看全部問答∨ |
我將stm32的usb端點2設置為雙緩沖,但是在測試的時候發現出現丟包現象; 設置雙緩沖代碼如下: #define SPEED_UP #ifdef SPEED_UP SetEPType(ENDP2, EP_BULK); SetEPDoubleBuff ...… 查看全部問答∨ |
|
基于SX1212的低功耗無線模塊,主控芯片采用同樣低功耗的STM8L101.其中SX1212和MCU之間采用SPI通信。自己剛學單片機不久,經驗不足,英語也不太好。所以在看1212的手冊時有點吃力,剛開始了解通信這方面,時序圖也沒看過幾個(希望前輩們能分享點經 ...… 查看全部問答∨ |
在LM3S9B96使用SafeRtos跑到error hook函數的可能原因分析 如題,在LM3S9B96下使用RTOS,程序跑到vApplicationErrorHook()函數中。vApplicationErrorHook()函數執行的時候,要么發生了調度器數據結構的沖突,要么是在執行上下文切換的時候潛在的棧溢出。 void vApplicationErrorHook( xTaskHandle ...… 查看全部問答∨ |