gcc下Letter-shell输入help后异常

问题前因:

因shell测试命令太多,代码占用空间太大了,准备删除一些不常用的测试指令,便于裁剪空间

正常现象以及Map文件

日志:

 

map:

异常现象

日志:

从错误信息看是输入了无效的字符,查看ascii 码表发现字符范围[0, 127], 应该是字符值大于127导致的;

map:

排查问题

1. 屏蔽代码

经过大量排查后发现每当屏蔽了sscanf()函数后就出现异常,但是sscanf()函数别的地方也没有用到,用法也没有问题;从map看只是多了2k的flash占用

2. 调试代码

 

 

从最后一个异常位置调试发现 *string 一直是0xff,从而死循环没有退出;

3. 定位问题 

根据上面发现的异常,返回上一级查看传入的参数

 

然后根据地址查看Map文件

发现是因为地址对齐规则,这里自动填充了,并且填充的是0xff; 从而导致从这里调用时不能正常退出字符串解析

4. 解决办法

  1. 在linkscript中_shell_command_start之前加上对齐:如下

            . = ALIGN(4);
            _shell_command_start = .;
            KEEP (*(shellCommand))
            _shell_command_end = .;
            . = ALIGN(4);

    此时_shell_command_start之后不再是fill了,固问题解决

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值