Arm使用keil仿真调试才能运行问题

目录

1 问题描述

2 问题分析

2.1如何定位到_sys_command_string函数

2.2_sys_command_string函数如何影响程序运行

2.3_sys_command_string函数如何产生的

3 解决办法

3.1方案一:使用Microlib

3.2方案二:提高编译优化等级,不使用-O0优化等级

3.3方案三:手动声明main()函数无输入参数


1 问题描述

1)不进行keil仿真时,程序不能正常运行;

2)使用keil仿真时,程序会在_sys_command_string函数卡一下,点击继续执行后,程序就可以正常运行。

注:笔者使用编译环境为Arm compiler V6编译器、GD32F5芯片、未使用microlib、优化等级-O0。

2 问题分析

2.1如何定位到_sys_command_string函数

        keil仿真调试里面,可以设置调试程序的起始点,默认是从main()开始调试的。如下图,使用正常程序进行keil仿真,程序已经执行到main()函数。

        笔者对异常程序进行仿真时,仍设置main()函数为调试的起始点。但打开仿真调试后,程序并没有执行到main()函数,而是执行到_sys_command_string函数。如下图。

        仿真调试时,卡在_sys_command_string函数后,可以强制程序往下执行;不适用keil仿真时,程序就会卡死在这里。

2.2_sys_command_string函数如何影响程序运行

        查询手册可知,_sys_command_string为库中处理main()的输入参数的函数,其作用为:设置传递给main()的参数个数argc、参数列表argv。

        查询手册可知_sys_command_string函数依赖于半主机模式,调用该函数,导致进入半主机模式,导致程序异常。

(ps:keil仿真时不就可以使用半主机模式吗?为什么进入调试后会卡在_sys_command_string?请大佬评论区指教。

2.3_sys_command_string函数如何产生的

        查询手册可知,使用Arm Compoler6,且优化选项为-O0时,会链接一个默认的库。这个库会对main()的输入参数进行处理,并且支持半主机模式。

        _sys_command_string就是库中处理main()的输入参数的函数之一。

3 解决办法

        如2.2节中所描述,_sys_command_string函数导致进入半主机模式,导致程序异常。_sys_command_string为库函数,解决思路为更换库,或者优化库。

3.1方案一:使用Microlib

        Mocrolib不支持半主机模式,程序不会进入半主机模式引起异常。

3.2方案二:提高编译优化等级,不使用-O0优化等级

        查询手册如下图,使用除-O0以外的优化等级时,如果main()没有输入参数,那么会链接一个优化过的库,该库不会对main()的输入参数进行处理。即不会调用_sys_command_string函数,不会进入半主机模式。

3.3方案三:手动声明main()函数无输入参数

        在.c文件中加入图中代码,编译器自动选择优化过的库,效果同3.2。

        当编译优化等级必须为-O0时,可以使用该方案。

  • 21
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Keil 5是一款常用的嵌入式系统开发工具,通过具有仿真调试功能的Keil 5在线仿真调试开发者可以方便地进行嵌入式系统的开发调试Keil 5在线仿真调试工具主要具有以下几个特点。首先,它支持多种不同的处理器架构,包括常见的ARM Cortex-M和Cortex-R系列等。这意味着使用Keil 5,你可以在同一个平台上开发不同架构的嵌入式系统。 其次,Keil 5提供了仿真功能,这意味着开发者可以在没有硬件设备的情况下进行系统的开发调试。通过连接Keil 5仿真器,开发者可以模拟系统的运行状态,并对代码进行步进调试、观察变量值等操作。这对于原型系统开发和系统调试非常有用。 第三,Keil 5还提供了处理器外设的仿真支持。这意味着在仿真过程中,不仅能够模拟处理器的运行,还可以模拟外设的工作状态,如串口通信、GPIO操作等。这样,开发者可以通过仿真工具快速验证外设的功能和交互。 最后,Keil 5还提供了实时操作系统(RTOS)的支持。开发者可以通过Keil 5在线仿真调试工具,在RTOS的环境下进行代码的开发调试。这对于需要使用RTOS的嵌入式系统非常有帮助。 综上所述,Keil 5在线仿真调试工具是一款功能强大、易用的嵌入式系统开发工具。通过它,开发者可以快速进行系统的开发调试和验证,极大地提高了开发效率和产品质量。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值