FW: Keil Mdk5.22 _ C++工程——加载std::map 仿真出现卡死在:BEAB BKPT 0xab

2019-07-20 17:52发布

各位大神,看看有没有解决的办法:
  问题描述:
    在使用keil mdk 5.22, 单片机是 : stm32f217VG. 仿真器:st-link v2.
     调试C++ 工程 代码时候,如果调用std 的map库,在进行map类型 变量定义后,
     编译和烧录都没有问题。
     但是仿真时候就会卡在 “BEAB  BKPT 0xab” (好像是所谓的semihost ),直接烧录也跑不起来。



附上源代码: 请参考,估计大家用407的应该也会出现。
到底 keil mdk 能否使用 std:: map 呢?  是否为 std::map 分配堆栈时候出现问题呢,不太明白std 的细节了。
我在ubuntu 下测试这个 std::map是可以的。

   


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
5条回答
zengli
1楼-- · 2019-07-20 21:40
 精彩回答 2  元偷偷看……
zengli
2楼-- · 2019-07-20 23:16
 精彩回答 2  元偷偷看……
mzwhhwj
3楼-- · 2019-07-21 02:00
单片机并不能支持C++那些强大的库,只能支持到很小的一部分,很可能是不支持,或者说不够资源来跑
zengli
4楼-- · 2019-07-21 03:42
在keil 5的 example 里面有 c++的例子,有一个是有 使用std::map 功能的,由于里面的串口使用 PA8,PA9和我的 板子配PB6,PB7的不一样,改了一下,
发现是可以跑的,能够正确的打印 串口发送信息。
里面有个retarget.c ,可能是来解决这个 std库调用底层的问题。 后面研究了在发上来。
/*----------------------------------------------------------------------------
* Name:    Retarget.c
* Purpose: 'Retarget' layer for target-dependent low level functions
* Note(s):
*----------------------------------------------------------------------------
* This file is part of the uVision/ARM development tools.
* This software may only be used under the terms of a valid, current,
* end user licence from KEIL for a compatible version of KEIL software
* development tools. Nothing else gives you the right to use this software.
*
* This software is supplied "AS IS" without warranties of any kind.
*
* Copyright (c) 2012 Keil - An ARM Company. All rights reserved.
*----------------------------------------------------------------------------*/
charlefu
5楼-- · 2019-07-21 06:19
修改启动文件中堆大小,Heap_Size       EQU     0x00010000,默认值太小,map会用到Heap。

一周热门 更多>