第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()函数里,便于之后修改。

相关文章
相关标签/搜索