第10课 软件中断

10.1 reboot

首先,在/work/uClinux-dist/linux-2.4.x/kernel/sys.c文件里添加如下代码:

然后,修改/work/uClinux-dist/linux-2.4.x/arch/armnommu/kernel/calls.S文件,将它加入到系统调用表中:

 

在/work/uClinux-dist/linux-2.4.x/include/asm-armnommu/unistd.h文件内,定义系统调用号:

 

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

 

在/work/uClinux-dist/uClibc/libc/sysdeps/linux/common/syscalls.c文件内如下代码

 

注释掉/work/uClinux-dist/user/sash/reboot.c文件内的这几行代码,并添加restart( 0xffff0000 );

 

回到/work/uClinux-dist/目录,执行sudo make xconfig,选择“User Settings”选项,然后进行应用程序配置。

 

选择Core Applications->reboot,如下图:

 

保存退出,将程序下载进入开发板。

下载完成后,在命令行输入reboot,

 

开发板执行重启,并打印出了,

 

并且开发板执行重启。

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

转载于:https://www.cnblogs.com/LiuFarrell/p/9836889.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值