完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
|
|
相关推荐
1个回答
|
|
在继续学习linux嵌入式开发的过程中,进行到中断按键实验的时候碰到了一些问题。写下这篇博客,希望能够记录下来,同时希望能够帮助到正在学习的你。
首先,我学习Linux嵌入式开发使用的是imx6ull开发板,也是正点原子的,教程也是看的正点原子的视频,在学习到GPIO中断实验的时候发现了自己的问题所在。刚开始程序一直报错,我看了一下问题描述,是结构体相关的错误,我c语言学习的不是特别扎实,于是我就花了一些时间补学了关于c语言结构体和数组指针的内容,在我们写关于gpio结构体的内容其实就相当于STM32中的库函数的意思,写了之后我们就能够直接对GPIO进行配置,例如结构体gpio_pin_config_t,代码如下: 可以看到在这个结构体中,嵌入了gpio_pin_direction_t和gpio_interrupt_mode_t两个结构体,分别代表了gpio引脚的输入输出模式与中断触发方式,然后在初始化中断的程序中,用到了这个结构体,例如: 在这段代码中,首先结构体命名为key_config,然后用GPIO初始化函数将GPIO1_18与key_config对应起来,然后设置 GPIO1_18为输入方式和上升沿触发的方式,诸如此类的结构体的应用还有许多,其实linux中c语言使用最多的就是函数、结构体、指针等。 在调试好程序之后,按照例程编写了中断服务函数和主函数,代码如下: 按理说这个程序现象应该是下到板子中去之后,led灯会一直闪烁,然后按下按键触发中断,蜂鸣器会响,结果发现led灯能闪烁,但是按下按键之后蜂鸣器不会响而且主程序中的led闪烁也会卡死。原子哥也说了 是因为复位之后,程序最开始执行的是清除bss段的代码,程序最开始就不是执行的中断向量表,然后我们的中断向量偏移是设定的起始地址0x87800000,我们能够在反汇编dis文件中清楚的看到,起始地址之并没有初始化中断服务函数, 于是左盟主将bss初始化的代码与清除bss段放在一起,在中断向量表之后,此时进行编译,看反汇编文件dis可以看到此时,从0x87800000开始之后进入了中断向量表。 然后我下进板子之后,发现现象还是和之前一样,然后我排查了很久的错误,一直也觉得是中断程序的错误,最后发现是因为,在.s文件中我的两个中服务函数IRQ和FIQ写反了, 就是这两个函数,可以看到注释还没有更改过来,然后改好之后,下在板子之后,发现有现象了,但是按键控制蜂鸣器还是不太灵敏,不能做到一按一开一按一关。我猜测可能是因为中断函数中写进了延时函数delay,后面会学习用定时器来写延时函数函数不知道会不会有所改观。 我注意到了,既然是中断向量地址偏移的问题,那能不能不改bss段的代码,从而把中断向量地址偏移的值改了呢,带着疑问,我进行了尝试,首先将bss段代码还原,放在开头,然后编译查看中断过向量表的地址,在中断初始化函数中设置中断向量偏移设置,然后发现还是不行。 后面我查阅了手册和出的pdf中提到了一句, 我就清楚了,中断向量表必须放在程序的最前面,也就是代码链接的起始地址,我看了STM32中的中断向量表也是如此。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1785 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1621 浏览 1 评论
1088 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
729 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1680 浏览 2 评论
1938浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
734浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
570浏览 3评论
596浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
559浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-25 01:12 , Processed in 0.639050 second(s), Total 45, Slave 40 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号