新一期ARM作业(五)----异常与中断

本文主要探讨了ARM架构中异常和中断的处理,包括未定义指令异常、SWI指令的应用、FIQ快速中断的实现以及如何利用函数指针和中断处理函数。通过对汇编代码的分析,解释了未定义指令异常产生的原因,并展示了如何通过修改指令来触发或避免这种异常。此外,还介绍了如何编写和配置中断处理程序以实现特定功能,如LED控制和按键响应。
摘要由CSDN通过智能技术生成

目录

描述

解答


描述

  • 1

014_und_exception_014_004/001有一个BUG,把以下字符串多加一个字符,看看程序还能否运行。(尝试分析反汇编,找到原因)

und_string:
    .string "undefined instruction exception"

 

  • 2

014_und_exception_014_004/002有一个BUG,把 start.S"bl print1"去掉,看看未定义指令异常会不会发生

 

  • 3

实际上LINUX系统中app调用的open, read等函数就是通过执行swi命令触发异常,在异常处理函数中实现文件的打开、读写功能。我们可以实现类似的功能,写一个led_ctrl汇编函数:
    a. 它可以接收1个参数
 b. 它会在栈中保存参数
 c. 它调用swi #val,这个val来自所接收的参数
 d. 恢复参数、返回    
  修改swi异常处理函数,
 e. 根据val来点灯、灭灯    
  修改main函数,调用 led_ctrl(0),led_ctrl(1)

 

  • 4

对于按键S2,使用快中断支持它。
  a. 编写FIQ的中断处理函数,实现保存环境、恢复环境的功能
  b. 编写按键的中断处理函数,实现点灯、灭灯功能
  c. 修改中断控制器,把S2对应的INTMOD设置为FIQ

 

  • 5

最后一个程序用到了函数指针、注册中断等概念。这对C语言的要求越来越高。main函数中用到这3个初始化函数,led_init();interrupt_init();key_eint_init()。把它们放在一个函数指针数组里,用一个for循环逐个调用

 

解答

  • 1

当字符串为 “undefined instruction exception”,汇编段代码及串口输出&#x

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值