飞花

飞花

0个粉丝

1

问答

0

专栏

0

资料

飞花  发布于  2013-12-07 11:36:12
采纳率 0%
1个问答
6801

推荐小总结:解决*** error 65: access violation at 0x40021000 : no 'read' pe...

 



之前使用野火开发板电压,学习自己建立工程模板的时候...

在工程模板建立完成,a编译无错误后大放送

进入软件仿真,出现如下错误

       大放送  *** error 65: access violation at 0x4002100e0 : no 'rea这d' permissiona

当时我想到的笨办法是打开 Project -> Options fo大放送r Target ..对... a

里面一共十个标签页,一电压个一个与火哥的工程模板对比对

终于在 D啊ebug 页面中发现不同电压



修改之后就可以仿真了

今天突然想起这个问题

使用 evenring 搜索一下 TA电压RMSTM.DLL,找到在 D:\Keil\ARM\BI啊N大放送

打开一看



大概看对了一下,这些是分别给不用的芯片用的电压

dll 参数我猜是 各大放送个芯片的型号内核

搜索一下,发现这里 http://www.realview.com.cn/faq/142.pdf...

嗯嗯,这个是我的第一有大放送点点技术的贴对

大家表扬一下啊









我来回答
回答4个
时间排序
认可量排序

lqzou918

0个粉丝

0

问答

0

专栏

0

资料

lqzou918 2013-12-07 11:36:13
认可0
前两天我也遇到这个问题,一起总结在这里:
1.  目标平台:stm32f107VCT6,使用Keil MDK4.72
    进入仿真后直接出现第一个错误:*** error 65: access violation at 0x0000000C : no 'read' permission。
    读权限不够。ISP调试没有问题,只有软件仿真才出现error。
    查了半天相关的内容解决不掉,很沮丧,大家都是用simulator状态下debug的memory map来解决访问权限不足的问题,这不能解决我的问题
    但是后来思考了一下发现问题不在这里。
2.  在仿真时候查看反汇编窗口发现0x0000_0000的地方开始存储器的内容都是0x0000。这个被解释成机器指令就是 MOV R0,R0(实际上这里正常情况下不是可执行的代码      
    区,因此也不应该将0x0000解释为MOV R0,R0)。原本这些位置应该存放的是[参考《CM3权威指南》第三章]MSP初值(0x0000_0000 ~ 0x0000_0003),复位向量
    (0x0000_0004 ~ 0x0000_0007),紧接着后面是一些异常中断向量表。其中复位向量是指示CM3内核在复位后应该从哪个地址取指的非常重要的一个值,而现在这个值是
    0x0000_0000,也就是说机器在复位后时设置MSP为0x0000_0000中的值后,从0x0000_0000取出指令解释并执行。这样程序会执行MOV R0,R0。
3.  出现的第一个Error是:access violation at 0x0000000C : no 'read' permission。0x0000_000C是硬Fault的异常向量入口地址。仿真时点击工具栏 -> Periphral ->Core Periphral
    -> Fault Reports,发现有两个Fault:Usage Faults的INVSTATE和Hard Faults的FORCED。查询《CM3权威指南》,INVSTATE位挂起的原因是加载到PC中的跳转地址值是偶数。
       机器在这个地址取值的时候应该(这里我不确定)还在执行F107的启动文件(.asm),由于STM32的指令地址的最低位必须是1(CM3的Thumb-2 ISA支持16位和32位寻址,因此地址的LSB
       理论上是没有用的,CM3在正常情况下将PC的LSB置为1来表示执行Thumb指令)。
    出现Usage Faults后,应该是由于一些CM3寄存器复位值的问题(我没有去验证过),又触发了硬Faults的FORCED位。这样Faults Reports中的位就解释通了。
4.  随后Google了半天,发现Keil官方论坛中提出的解决方案与我的问题相符(官方论坛的/22994/)。在Options for Target -> Debug -> "Simulator section" -> CPU DLL
    中应该设置-REMAP,这样才会将0x0800_0000的Flash映射到0x0000_0000的地址上。
5.  这样,一开始0x0000_000C的Error解决了,运行出现了楼主的错误:*** error 65: access violation at 0x40021000 : no 'read' permission。
    现在出现的问题才是大部分人遇到的问题,CM3对存储器定义了4种属性,读写执行缓冲等等[参考《CM3权威指南》第五章],这时只要在仿真时点 Debug -> Memory map,将适当长度的
    存储器赋予所需的权限就可以进行F107的仿真了。

    楼主链接中提到的:自己写simulation DLL,恐怕对处理器细节没有很好把握的话估计很难用到了,毕竟有硬件平台还是用硬件平台调试,Flash的烧写算法比这个CPU DLL的仿真靠谱。

ethanhunte

0个粉丝

0

问答

0

专栏

0

资料

ethanhunte 2013-12-07 11:36:14
认可0
我刚开始学SMT32也遇到楼主的问题,按楼主说的做确实解决了问题


lczong2001

0个粉丝

0

问答

0

专栏

0

资料

lczong2001 2013-12-07 11:36:15
认可0
牛B,真的可以,太感谢了

sweet92

0个粉丝

0

问答

0

专栏

0

资料

sweet92 2013-12-07 11:36:14
认可0
支持一下!

或将文件直接拖到这里
悬赏:
E币
网盘
* 网盘链接:
* 提取码:
悬赏:
E币

Markdown 语法

  • 加粗**内容**
  • 斜体*内容*
  • 删除线~~内容~~
  • 引用> 引用内容
  • 代码`代码`
  • 代码块```编程语言↵代码```
  • 链接[链接标题](url)
  • 无序列表- 内容
  • 有序列表1. 内容
  • 缩进内容
  • 图片![alt](url)
+ 添加网盘链接/附件

Markdown 语法

  • 加粗**内容**
  • 斜体*内容*
  • 删除线~~内容~~
  • 引用> 引用内容
  • 代码`代码`
  • 代码块```编程语言↵代码```
  • 链接[链接标题](url)
  • 无序列表- 内容
  • 有序列表1. 内容
  • 缩进内容
  • 图片![alt](url)
相关问答
无更多相似问答 去提问
举报反馈

举报类型

  • 内容涉黄/赌/毒
  • 内容侵权/抄袭
  • 政治相关
  • 涉嫌广告
  • 侮辱谩骂
  • 其他

详细说明

易百纳技术社区