解决&Load$$ER_RAM$$Base赋值语句的崩溃
来源:互联网 发布:mysql序列自增 java 编辑:程序博客网 时间:2024/05/18 02:39
//=====================================================================
//TITLE:
// 解决&Load$$ER_RAM$$Base赋值语句的崩溃
//AUTHOR:
// norains
//DATE:
// Monday 27-September-2010
//Environment:
// KEIL MDK 4.0
// .NET Micro Framework 4.1
//=====================================================================
也许大家将一切参数都规规矩矩设置完毕,满怀希望开始调试NativeSample时,突然发现在调试TinyHal.CPP的BootEntry函数时卡壳了。具体点来说,就是在调试到LOAD_IMAGE_Start = (UINT32)&Load$$ER_RAM$$Base;这个语句的时候,会出现总线错误,如图:
这时候可能大家的第一反应是Heap或Stack的设置有误。但实际上,无论你怎么设置Heap或Stack,这个错误还是依然存在的。所以基本可以确定,问题不出在Heap和Stack的设置。如果大家还有心的话,修改TinyHal.cpp的代码,比如在BootEntry增添如下语句:
会发现一切都是正常的。那么为什么偏偏给LOAD_IMAGE_Start赋值的时候就出错了呢?是不是LOAD_IMAGE_Start有什么蹊跷?我们可以再次执行debug,设置断点,然后在symbols窗口查看LOAD_IMAGE_Start的地址,如图:
看到什么了么?没错!LOAD_IMAGE_Start的地址是0x0000 0040,而这个根本就不是内存的地址!那么0x0000 0040此时会是什么地址呢?如果是以Flash模式启动,Flash的地址就印射到0x0000 0000,那么这时候的0x0000 0040指向的就是Flash!现在直接往Flash写数值,肯定会引发BUS ERROR!
找到问题的根源,一切就好办了。打开scatterfile_tools_mdk.xml文件,发现ER_RAM_RO字段的设置如下:
<ExecRegion Name="ER_RAM_RO" Base="0x00000000" Options="ABSOLUTE" Size="">
起始地址为0x0000 0000,这是不正确的,因为内存地址是以0x2000 0000为起始的。如果大家不明白这地址的来源,可以查看我这篇文章:《详解STM32F10x在.Net Micro Framework的Processor Properties的取值》(http://blog.csdn.net/norains/archive/2010/09/20/5896807.aspx)。现在只要将Base的数值更改为0x2000 0000即可,如:
<ExecRegion Name="ER_RAM_RO" Base="0x20000000" Options="ABSOLUTE" Size="">
这时候再开始调试,发现已经能够顺利执行LOAD_IMAGE_Start变量的赋值,如图:
- 解决&Load$$ER_RAM$$Base赋值语句的崩溃
- TinyCLR的this赋值语句的缘起和解决
- 赋值语句的运用
- 有效的赋值语句
- 赋值语句的运用
- ios崩溃的解决
- TransactionTooLargeException崩溃的解决
- 赋值语句的返回值
- 赋值语句的执行顺序
- 关于赋值语句的思考
- 简单赋值语句的逆向
- python中赋值语句和增强赋值语句的区别
- minicom崩溃问题的解决
- 解决RealPlayer11崩溃的问题
- SystemUI崩溃的解决过程
- weak_register_no_lock crash 崩溃的解决
- ubuntu解决ecplise的崩溃
- "Base SDK Missing"问题的解决
- 当mysql中指定的socket路径改变时如何通过ODBC进行访问?
- Android ListView/ListActivity点击长按事件
- C# 秒杀倒计时
- 平均市盈率
- 全面解析C#创建XML文件的具体操作
- 解决&Load$$ER_RAM$$Base赋值语句的崩溃
- 软件开发常用英文词汇
- 转:恶心恶俗的爱国歌曲
- C#打开一个文件的操作详解
- 3com dabs
- ORACLE触发器
- C#创建文件的实战应用示例解析
- HTTP错误
- 抵制日货之日货列表