第10課 軟件中斷

10.1 reboot

首先,在/work/uClinux-dist/linux-2.4.x/kernel/sys.c文件裏添加以下代碼:linux

而後,修改/work/uClinux-dist/linux-2.4.x/arch/armnommu/kernel/calls.S文件,將它加入到系統調用表中:函數

 

在/work/uClinux-dist/linux-2.4.x/include/asm-armnommu/unistd.h文件內,定義系統調用號:spa

 

修改/work/uClinux-dist/linux-2.4.x/include/asm-armnommu/arch-firefox/system.h文件,申明該函數:firefox

 

在/work/uClinux-dist/uClibc/libc/sysdeps/linux/common/syscalls.c文件內以下代碼命令行

 

註釋掉/work/uClinux-dist/user/sash/reboot.c文件內的這幾行代碼,並添加restart( 0xffff0000 );3d

 

回到/work/uClinux-dist/目錄,執行sudo make xconfig,選擇「User Settings」選項,而後進行應用程序配置。rest

 

選擇Core Applications->reboot,以下圖:blog

 

保存退出,將程序下載進入開發板。開發

下載完成後,在命令行輸入reboot,io

 

開發板執行重啓,並打印出了,

 

而且開發板執行重啓。

10.2 按鍵重啓

利用開發板上的按鍵,經過長按按鍵4秒,來執行開發板重啓。在scu下新建一個restart的c文件。

基本思路:首先要使用按鍵,須要對GPIO進行初始化,而後再一個while()大循環裏不斷檢測按鍵是否被按下,若是按鍵被按下,打開LED燈,用於反饋按鍵是否被按下,而後等待3秒,再判斷按鍵是否被按下,這是爲了防止意外的抖動形成系統被錯誤重啓,若是此時按鍵被按下,說明是須要進行重啓,等待1秒後,關閉LED燈,進行重啓。完整程序以下:

 

修改Makefile文件,

 

編譯經過之後,下載進入開發板,執行restart,按下按鍵,持續4秒以上,看到按下按鍵時,LED燈亮,過幾秒一之後,LED燈滅,而且開發板重啓。

 

10.3 總結

前半部分按照PPT上的步驟,能夠很輕鬆的將開發板重啓,後半部分代碼部分要困難一些,想直接按下重啓就完成,可是考慮到實際應用中,通常按鍵都須要一個防抖的檢測,避免一些誤操做,因此才實行延遲部分時間,但延時用sleep()是很差的,想用一個while()循環來作,但又很差設置多大的數才能表示1秒,因此參考了其餘同窗就用sleep()函數,可是,把他放入了單獨定義的delay()函數裏,便於之後修改。

相關文章
相關標籤/搜索