Push_back() 导致程序在进入 main() 之前停止

2023-12-06

我正在为我的 STM32F3 Discovery 板使用 C++ 进行开发,并使用 std::deque 作为队列。在尝试调试我的代码(直接在带有 ST-link 的设备上或在模拟器中)后,代码最终在 main() 中输入我的代码之前在断点处停止。然而,SystemInit() 配置板就好了..

我已将这种行为追溯到使用push_back()(和push_front),因为从代码中注释掉它可以解决问题。通过disassmebly我发现使用后,执行到了断点指令BKPT处就停止了,恢复执行后就不再继续执行了。该指令是 _sysopen() 调用的一部分,调用路径:

__main -> __scatterload -> __scatterload_null -> __rt_entry -> __rt_lib_init -> __rt_lib_init_atexit_1 -> _initio -> freopen -> _sysopen

令我感兴趣的是打电话给_initio,如果不使用push_back,它就会丢失,因为没有__rt_lib_init_atexit_1。引入push_back也使得代码大小从10 kB减少到34 kB。

这可能是由于某些错误的配置造成的,还是我应该尝试其他 IDE?我没主意了。


我有同样的问题。我了解到这与所谓的“半主机”有关 我应该使用我的项目文件“retarget.c”进行构建,其中包含 诸如“_sys_xxxx()”之类的函数是目标特定的驱动程序级别函数 (“retarget.c”的许多版本都是 Keil-MDK 的一部分,也可以在网上找到)。 所以我这样做了,但链接器抛出了与此类似的错误:

Error: L6200E: Symbol _sys_open multiply defined (by arm_xxx_lib.o and retarget.o)
Error: L6200E: Symbol _sys_close multiply defined (by arm_xxx_lib.o and retarget.o)
...

我通过编辑原始的“retarget.c”解决了这个问题,以便其中定义的函数将 覆盖 Keil-MDK 库中的库。新的“retargeted.c”在这里:

#include <stdio.h>
#include <rt_misc.h>

#pragma import(__use_no_semihosting_swi)

#include <rt_sys.h>

extern void $Super$$_sys_open(void);

FILEHANDLE $Sub$$_sys_open(const char *name, int openmode)
{
 return 1; /* everything goes to the same output */
}

extern void $Super$$_sys_close(void);
int $Sub$$_sys_close(FILEHANDLE fh)
{
 return 0;
}

extern void $Super$$_sys_write(void);
int $Sub$$_sys_write(FILEHANDLE fh, const unsigned char *buf,
              unsigned len, int mode)
{
 //your_device_write(buf, len);
 return 0;
}

extern void $Super$$_sys_read(void);
int $Sub$$_sys_read(FILEHANDLE fh, unsigned char *buf,
             unsigned len, int mode)
{
 return -1; /* not supported */
}

extern void $Super$$_ttywrch(void);
void $Sub$$_ttywrch(int ch)
{
 char c = ch;
 //your_device_write(&c, 1);
}

extern void $Super$$_sys_istty(void);
int $Sub$$_sys_istty(FILEHANDLE fh)
{
 return 0; /* buffered output */
}

extern void $Super$$_sys_seek(void);
int $Sub$$_sys_seek(FILEHANDLE fh, long pos)
{
 return -1; /* not supported */
}

extern void $Super$$_sys_flen(void);
long $Sub$$_sys_flen(FILEHANDLE fh)
{
 return -1; /* not supported */
}

extern void $Super$$_sys_exit(void);
long $Sub$$_sys_exit(FILEHANDLE fh)
{
 return -1; /* not supported */
}

使用这个版本的“retarget.c”链接器很满意,我的程序运行时没有问题。 也许这也会对你有帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Push_back() 导致程序在进入 main() 之前停止 的相关文章

  • 在java程序中使用c++ Dll

    我正在尝试使用System LoadLibrary 使用我用 C 编写的一个简单的 dll UseDllInJava java import com sun jna Library import com sun jna Native imp
  • clang 格式换行符在错误的位置

    给出以下代码行 get abc manager get platform status abc platform status sw update status fill update status actions allowed stat
  • 在 VS2017 下使用 Conan 和 CMake 项目进行依赖管理

    我正在尝试使用 CMake 与 VS2017 集成为 C 设置一个开发环境 以便在 Linux x64 下进行编译 为了更好地管理依赖关系 我选择使用 Conan 但我对这个软件还很陌生 我想知道让 VS2017 识别项目依赖关系的最佳方法
  • 如何使用 zlib 制作 .zip 文件

    我正在阅读zlib的文档 它相当详细 但我读到了这一行 输出数据将位于zlib格式 与 gzip 或zip formats http www zlib net zlib how html http www zlib net zlib how
  • C 程序从连接到系统的 USB 设备读取数据

    我正在尝试从连接到系统 USB 端口的 USB 设备 例如随身碟 获取数据 在这里 我可以打开设备文件并读取一些随机原始数据 但我想获取像 minicom teraterm 这样的数据 请让我知道我可以使用哪些方法和库来成功完成此操作以及如
  • ASP.NET Core 与现有的 IoC 容器和环境?

    我想运行ASP NET 核心网络堆栈以及MVC在已托管现有应用程序的 Windows 服务环境中 以便为其提供前端 该应用程序使用 Autofac 来处理 DI 问题 这很好 因为它已经有一个扩展Microsoft Extensions D
  • 为什么Apache MPM prefork.c 使用互斥体来保护accept()?

    我坐下来读书Apache 的 MPM prefork c http code metager de source xref apache httpd server mpm prefork prefork c这段代码使用了一个名为accept
  • 如何尝试/捕获所有异常

    我正在完成由其他人启动的 UWP 应用程序 该应用程序经常崩溃 我总是陷入困境应用程序 at if global System Diagnostics Debugger IsAttached global System Diagnostic
  • C++中delete和delete[]的区别[重复]

    这个问题在这里已经有答案了 可能的重复 C 中的删除与删除 运算符 https stackoverflow com questions 2425728 delete vs delete operators in c 我写了一个包含两个指针的
  • 从 C 结构生成 C# 结构

    我有几十个 C 结构 我需要在 C 中使用它们 典型的 C 结构如下所示 typedef struct UM EVENT ULONG32 Id ULONG32 Orgin ULONG32 OperationType ULONG32 Size
  • 如何创建用于 QML 的通用对象模型?

    我想知道是否有任何宏或方法如何将 Qt 模型注册为 QObject 的属性 例如 我有AnimalModel http doc qt io qt 5 qtquick modelviewsdata cppmodels html qabstra
  • 对 boost 库的依赖项没有完整路径

    我已经成功构建了动态库 依赖于使用自定义前缀构建和安装的 boost 库 b2 install prefix PREFIX 然而 当我跑步时otool L在我的库中 我得到如下输出 libboost regex dylib compatib
  • libxml2 xmlChar * 到 std::wstring

    libxml2似乎将所有字符串存储在 UTF 8 中 如xmlChar xmlChar This is a basic byte in an UTF 8 encoded string It s unsigned allowing to pi
  • DataTable:通过 LINQ 或 LAMBDA 进行动态 Group By 表达式

    我有一个数据表 我想在其中对未指定数量的字段进行分组 发生这种情况的原因是用户可以选择他想要分组的字段 所以 实际上 我将选择推入列表中 在这个选择上 我必须对我的数据表进行分组 想象一下这段代码 VB 或 C 都一样 public voi
  • ASP.NET JQuery AJAX POST 返回数据,但在 401 响应内

    我的应用程序中有一个网页 需要调用我设置的 Web 服务来返回对象列表 这个调用是这样设置的 document ready function var response ajax type POST contentType applicati
  • 从 Delphi 调用 C# dll

    我用单一方法编写了 Net 3 5 dll 由Delphi exe调用 不幸的是它不起作用 步骤 1 使用以下代码创建 C 3 5 dll public class MyDllClass public static int MyDllMet
  • 使用 HTMLAgilityPack 从节点的子节点中选择所有

    我有以下代码用于获取 html 页面 将网址设置为绝对 然后将链接设置为 rel nofollow 并在新窗口 选项卡中打开 我的问题是关于将属性添加到 a s string url http www mysite com string s
  • C 中带有指针的结构的内存开销[重复]

    这个问题在这里已经有答案了 我意识到当我的结构包含指针时 它们会产生内存开销 这里有一个例子 typedef struct int num1 int num2 myStruct1 typedef struct int p int num2
  • C#中为线程指定特殊的cpu

    我有 2 个线程 我想告诉其中一个在第一个 cpu 上运行 第二个在第二个 cpu 上运行 例如在具有两个 cpu 的机器中 我怎样才能做到这一点 这是我的代码 UCI UCIMain new UCI Thread UCIThread ne
  • 如何使用 C# 以低分辨率形式提供高分辨率图像

    尝试使用 300dpi tif 图像在网络上显示 目前 当用户上传图像时 我正在动态创建缩略图 如果创建的页面引用宽度为 500x500px 的高分辨率图像 我可以使用相同的功能即时转换为 gif jpg 吗 将创建的 jpg 的即将分辨率

随机推荐

  • 谷歌 OAuth 错误 -1001

    在我的应用程序中 我尝试实现谷歌帐户访问 当我在登录会话中初始化其工作时 之后它在屏幕截图中抛出以下错误 这是我的代码初始化和方法实现 static NSString const kKeychainItemName nil NSString
  • 将对象数组从 servlet 发送到 JSP

    我想通过请求将我自己的对象数组发送到 JSP 页面 在 servlet 中的这部分代码中 我将获取数据 将其放入对象数组中 并将它们设置为请求 if request getParameter todo equals show article
  • 在 Python 中解析 Twitter JSON 对象

    我正在尝试从 Twitter 下载推文 我为此使用了 python 和 Tweepy 虽然我对 Python 和 Twitter API 都很陌生 我的Python脚本如下 usr bin python import modules imp
  • 根据 PWD 更新多项缓冲区名称

    如果我使用 konsole 或其他终端 终端标签名称可以根据 PWD 更改 但在多项中 缓冲区名称是 terminal
  • 如何在 WPF 中创建反斜杠键的键绑定?

    Trying to define a CTRL Backslash keybinding for our WPF command but we re running into two issues 反斜杠键没有任何预定义常量 只有 Oem
  • 如何向下滚动 UITable 视图,直到在 Calabash 中看到带有标签“Value”的单元格

    如何向下滚动 UITableView 直到看到带有标签 Value 的单元格葫芦 黄瓜 我一直在尝试使用以下方法来做到这一点 Then I swipe down until I see Value 并使用 Then I scroll dow
  • 有没有办法在属性网格之外使用 CollectionEditor?

    我正在用一些可以让我更好地自定义 UI 的东西替换我的属性网格 我在表单上放置了一个按钮 我希望单击该按钮时会弹出一个 CollectionEditor 并允许我修改我的代码 当我使用 PropertyGrid 时 我所需要做的就是向指向我
  • 使用 Flexbox 在具有共享标题的两列布局中拉伸列

    我正在使用 Flexbox 创建带有标题行的两列布局 box sizing border box position relative container border 2px solid gray display flex flex wra
  • VBA - 将 SAPI 语音保存到给定的文件类型?

    My Task 可以在 Office 应用程序中使用语音 我的目标是将 MS SAPI 语音保存为给定的文件类型 AFAIK 我的代码示例保存到 WAV 文件 Problem 我不知道是否可以仅定义所需的文件类型扩展名 或者是否有必要进行一
  • 来自 Qt C++ 应用程序的倍频程图

    我有一个 QT C 应用程序 它使用 QProcess 运行 Octave 程序 我可以通过读取标准输出 错误并使用 write 方法写入其标准输入 例如 octave gt write 5 5 n 来与它进行通信 正如我告诉你的 我得到了
  • 屏幕方向更改时旋转视图(但不是布局)

    我想旋转按钮 文本视图 等 屏幕方向发生变化 但我想保持布局不变 如何做呢 我正在使用线性布局 This is what I mean Create res gt layout gt layout land并将你的 xml 文件放入横向 模
  • 要避免的 jQuery 陷阱 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心以获得指导 我正在用 jQuery 启
  • dblookupcombobox 有空行

    我有一个关于 DBLookupComboBox 的问题 我有一个程序 其中有我编写的数据库 它拥有一切 除了当我打开 DBLookupComboBox 时 它必须有一行带有空值 因为当用户不想选择任何内容时 但没有一个 如何让空行显示出来
  • Kotlin 中是否有适用于可序列化类型的接口?

    我想创建一个大致如下所示的类 class MyWrapperClass
  • 如何控制推送通知中按钮的功能?

    我能够向 iOS 设备发送推送通知 通知上有一个 关闭 按钮和一个 查看 按钮 当用户点击 查看 按钮时 应用程序将打开根视图控制器 该应用程序内有一个新闻部分 假设该通知是为了提醒用户有新的新闻报道可供他们查看 如果他们点击 查看 将显示
  • 每当 Android 派中的应用程序被杀死时,服务也会被杀死

    我正在通过创建 Android 应用程序来学习 Android 编程 但是每当我杀死应用程序服务时也会被杀死 我在用着JobIntentService 使该应用程序在后台运行 工作意图服务类 public class BackGroundD
  • Windows 服务中的 TCP IP 侦听器

    我正在尝试创建一个需要在后台运行并侦听传入流量的 Windows 服务 正常且常规的 TCP 侦听器 我的代码是 private TcpListener server public void startServer EventLog Wri
  • 如何使 razor 成为现有项目中的默认视图引擎

    我将 MVC 2 项目升级到 MVC 3 如何在现有项目上将默认视图引擎设置为 Razor 编辑 抱歉 我不太清楚 我希望 Razor 成为 添加视图 对话框中的默认类型 简短回答 更改 global asax 以同时使用 Webforms
  • 通讯Arduino-C++不读Arduino

    我有以下代码 QSerialPort arduPort COM5 arduPort setBaudRate QSerialPort Baud9600 arduPort setDataBits QSerialPort Data8 arduPo
  • Push_back() 导致程序在进入 main() 之前停止

    我正在为我的 STM32F3 Discovery 板使用 C 进行开发 并使用 std deque 作为队列 在尝试调试我的代码 直接在带有 ST link 的设备上或在模拟器中 后 代码最终在 main 中输入我的代码之前在断点处停止 然