前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Cortex‐M3权威指南第一遍阅读后的记录

Cortex‐M3权威指南第一遍阅读后的记录

作者头像
用户4645519
发布2020-09-07 10:38:30
8110
发布2020-09-07 10:38:30
举报
文章被收录于专栏:嵌入式学习

这本书,买了很久,到现在算是大致浏览了一边,还是非常有收获的,以前都是直接看的芯片的手册,但是芯片手册在内核当中,讲述的知识点是比较少的,因此相互结合的看,很有必要。

这里就自己想到什么就整理什么,肯定有遗漏的,以后有机会看第二遍,再完善。

1 双堆栈的特点,MSP、PSP,看着有点迷糊,两者物理地址是一样,主堆栈指针(MSP):复位后缺省使用的堆栈指针,用于操作系统内核以及异常处理例程(包括中断服务例程)。这个用于操作系统的任务切换,中断处理等用途。 进程堆栈指针(PSP):由用户的应用程序代码使用,自己写的程序的调用时用,比如函数调用子函数。 这个的特点使得基于cm3的芯片就十分适合移植rtos来开发。 2 内存映射,总共就4GB的空间,哈佛结构,部分区域的地址是固定,不允许芯片厂商进行更改,这个和ARM7是有区别的。 3 位带别名,这个可以让操作寄存器有原子特性,十分方便。这个在内核层面就将可靠性提高了,因此相比较8051,avr,pic等,基于cm3的芯片从本质上有了质的飞跃,毕竟怎么说也是32为芯片。 4 有很多寄存器是写1有效,写0无效的,这个特点也增加了可靠性,避免了“读-修改-写”的三部曲,也具有原子性,运行指令的速度也更加快了。 5 systick中断,这个中断就是为移植os而设计的。 6 pendsv、svc中断,这个中断的用途就是在rtos中任务切换的时候用到的。 直接摘录文档中的说明: 个中事件的流水账记录如下: 1. 任务 A 呼叫 SVC 来请求任务切换(例如,等待某些工作完成) 2. OS 接收到请求,做好上下文切换的准备,并且 pend 一个 PendSV 异常。 3. 当 CPU 退出 SVC 后,它立即进入 PendSV,从而执行上下文切换。 4. 当 PendSV 执行完毕后,将返回到任务 B,同时进入线程模式。 5. 发生了一个中断,并且中断服务程序开始执行 6. 在 ISR 执行过程中,发生 SysTick 异常,并且抢占了该 ISR。 7. OS 执行必要的操作,然后 pend 起 PendSV 异常以作好上下文切换的准备。 8. 当 SysTick 退出后,回到先前被抢占的 ISR 中,ISR 继续执行 9. ISR 执行完毕并退出后,PendSV 服务例程开始执行,并且在里面执行上下文切换 10. 当 PendSV 执行完毕后,回到任务 A,同时系统再次进入线程模式。 所以rtos中写代码,和裸机是有区别,尤其是外部中断,需要判断是否切换任务,freertos和ucos都是有特定的函数的。 6 各种fault类异常,CM3 中的 Faults 可分为以下几类: 总线 faults 存储器管理 faults 用法 faults 硬 fault 一盘情况遇到的多是hardfault,因为其他fault最后都会升级到硬 fault,那么在调试的时候,就和停机、卡死。书中也整理了各类fault发生的原因汇总,

7 中断,NVIC嵌套中断,顾名思义,中断是有嵌套的,而且有抢占优先级和亚优先级的区分,并且中断延迟大大缩短,有咬尾中断和晚到中断。 8 操作模式和特权极别——还没看懂 9 调试功能,jtag、swd都是兼容的,还有嵌入式跟踪宏单元(ETM)、数据的跟踪单元 DWT(这个该能还有延时计数的功能)、ITM可以输出信息作为调试log,和swo结合比uart输出较快,具体如下; 跟踪组件:数据观察点与跟踪(DWT) 跟踪组件:指令跟踪宏单元(ITM) 跟踪组件:嵌入式跟踪宏单元(ETM) 跟踪组件:跟踪端口接口单元(TPIU) 闪存地址重载与断点单元(FPB)

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/08/04 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档