完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
本篇小技巧是我最近在编写USB驱动的时候发现的,觉着挺好玩的,这里就写出来跟大家分享一下,如果觉着有用就收着了,没用的话就算是娱乐一下吧!
不知道有木有人有这种感脚,即如果你把技术当作一种专业的爱好,而不是养家糊口的工具,你往往会沉迷其中,往往会因为一点小收获、一点小成就、一点小发现而感到欣喜,对这一类人来说,收获知识所带来的自身素质的提高是最大的满足,他们把技术当作爱好,从中收获知识、优越感、自信等等,哈哈,不知道看到本篇的又中枪的没。好了,不扯这些了,进入正题吧: 本篇是一种另类的使用方法,小技巧而已,不过相信一些人会喜欢。在以前我介绍过Kinetis的启动代码部分,在里面我曾经介绍过,Kinetis为了提高中断执行的速率,在启动代码部分把中断向量表copy了一份放到RAM里面,然后把向量中断寄存器重定位到该部分向量表,这样一定程度上缩短了Kinetis执行中断的时间,这部分的功能代码如下所示(在启动代码里可以找得到): /* Copy the vector table to RAM */ if (__VECTOR_RAM != __VECTOR_TABLE) { for (n = 0; n < 0x410; n++) __VECTOR_RAM[n] = __VECTOR_TABLE[n]; } /* Point the VTOR to the new copy of the vector table */ write_vtor((uint32)__VECTOR_RAM); 既然Kinetis的中断执行机制是这样的,那么我们可以这样想,既然Kinetis执行中断服务的时候是根据发生中断的中断向量号查找到其在中断向量表的位置(即根据n找到_VECTOR_RAM[n]的内容)然后读出目标中断服务程序(即ISR)的地址然后跳到该地址执行目标中断服务函数,以PORTB口中断为例,那么我们在加载中断服务函数地址到向量表的时候完全可以不采用以前我说的那种方法(以前是#define VECTOR_104 PortB_ISR),而是采用如下这种方式,即我们直接更改RAM中向量表的内容(即把default_isr替代为我们自己定义的中断服务函数的地址,这样可以达到同样的目的): extern uint32 __VECTOR_RAM[]; //Get vector table that was copied to RAM __VECTOR_RAM[104]=(uint32)PortB_ISR; //replace ISR 其实通篇说了这么多话,上面这两行代码才是本篇的目的所在,即核心技巧就在这里了,我想表达意思也很明白,就是不要小看这两行代码,虽然很简单,但它表达的是一种思想,即如果我们把内在的机制领悟透彻了,你就会明白,有些东西并不是一成不变的,在保证功能的时候,随心所欲的改变才说明你完全懂它了... |
|
相关推荐
|
|
你这种做法比较接近一个专业技术,叫做“回调”,也就是“callback”。我在LiteFwLib固件库中的Systick的驱动就有基于回调机制“注册”用户自定义中断程序的实现。回调对中断的要求也不局限于与要把整张中断向量表放在内存里,这样也比较浪费空间,实际上只要对需要动态注册的中断建立起一个从rom到ram的映射就可以实现回调了。
|
|
|
|
|
|
大神 !!!
|
|
|
|
|
|
只有小组成员才能发言,加入小组>>
1931个成员聚集在这个小组
加入小组我的项目我做主,使用GN+Ninja来完成构建系统(VSCode开发RT106X)
36414 浏览 0 评论
NXP IMX8应用处理器快速入门必备:技巧、使用、设计指南
4782 浏览 1 评论
6099 浏览 1 评论
6807 浏览 0 评论
NXP i.MX6UL开发板(linux系统烧录+规格+硬件+模块移植)使用手册
4243 浏览 0 评论
641浏览 2评论
求助,S32G上Core M启动后如何让Core A在Flash指定位置加载uboot?
637浏览 2评论
ESP32-WROVER-IE + LAN8720以太网,GPIO0电压只有1.6v,无法正常进入spi flash boot模式如何解决?
639浏览 2评论
求分享适用于PN7160 Android的NFC工厂测试应用程序
725浏览 2评论
833浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-18 15:07 , Processed in 1.387348 second(s), Total 80, Slave 63 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号