MDK 编译错误总结

.\Output\Q-SYS.axf: Error: L6915E: Library reports error: __use_no_semihosting was requested, but _ttywrch was referenced

解决的代码如下: 
//不使用半主机模式
#if 1 //如果没有这段,则需要在target选项中选择使用USE microLIB
#pragma import(__use_no_semihosting)    //注释本行, 方法1
struct __FILE {
int handle;
};
FILE __stdout;

_sys_exit(int x)
{
x = x;
}

//__use_no_semihosting was requested, but _ttywrch was referenced, 增加如下函数, 方法2
_ttywrch(int ch)
{
ch = ch;
}
#endif

参考: http://www.openedv.com/posts/list/12417.htm


--- L6220E: Execution region RW_IRAM size (155360 bytes) exceeds limit (98304 bytes).
出现上面的错误后, 查看 .map文件, 检查相关的RW项, 发现如下:
    Symbol Name                              Value     Ov Type        Size  Object(Section)
Memory Map of the image
Base Addr    Size         Type   Attr      Idx    E Section Name        Object
0x20000044   0x00025800   Zero   RW          390    .bss                lcd9320.o

再查找lcd9320, 发现如下, LCD_BUF定义的太大.
.bss                                     0x20000044   Section    153600  lcd9320.o(.bss)
LCD_BUF                                  0x20000044   Data       153600  lcd9320.o(.bss)

--- lpc9320.c 中有如下定义:
unsigned short LCD_BUF[LCD_YSIZE][LCD_XSIZE]; //原因找到!!!!

//---- 定义大容量内存数据.
#define dfBufLen 0x100000
//必须定义为全局变量后才可以放于SDRAM中(在map中可找到); 若为local则Error, 在map中无法找到对应段.
unsigned char g_ucBuf[dfBufLen];

void MyBufTest(void)
{
//unsigned char ucBuf[dfBufLen]; //Error
g_ucBuf[dfBufLen - 2] = 0x01;
g_ucBuf[dfBufLen - 1] = 0x02;
DEBUG_PRINT("main-->Buf = 0x%04x, 0x%04x\n", g_ucBuf[dfBufLen - 2], g_ucBuf[dfBufLen - 1]);
}
Error: L6406E: No space in execution regions with .ANY selector matching f24_ascii.o(.constdata).
//MCU类型选择错误: STM32F103VE, 错误的选择 STM32F103CB

程序跳进了硬件错误中断服务程序,也就是void HardFault_Handler(void),读取向量错误。
你可以查看一下异常的寄存器,先确定是精确的总线fault还是不精确的总线fault,如果是精确的fault那最可能的就是数组越界,
或是变量访问越界,如果是不精确总线fault,那比较多出现的是堆栈的问题。 出现最多的如变量访问越界

HardFault_Handler 的调试 最简单的办法:
在进入HardFault_Handler之后,根据堆栈指针查看堆栈,找到堆栈中最新的函数返回地址,到这个地址上去加断点,
一步步根据汇编执行代码。很快就能找到出错原因,大多数是数组溢出,或者是指针初始化的问题。




  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值