打印
[STM32F1]

程序跑飞的问题

[复制链接]
楼主: 比神乐
手机看帖
扫描二维码
随时随地手机跟帖
21
比神乐|  楼主 | 2020-8-26 15:15 | 只看该作者 |只看大图 回帖奖励 |倒序浏览
ayb_ice 发表于 2020-8-26 15:09
就是越界了而已

可是我调试时发现没有越界呀

使用特权

评论回复
22
比神乐|  楼主 | 2020-8-26 15:16 | 只看该作者
sonicll 发表于 2020-8-26 15:10
因为 sprintf(s, "%-10.2f", ShiftValue0),10位长度2位小数,ShiftValue0的整数部分很大的话,这个格式化 ...

整数部分没有那么大,最多5位数

使用特权

评论回复
23
ayb_ice| | 2020-8-26 15:21 | 只看该作者
比神乐 发表于 2020-8-26 15:16
整数部分没有那么大,最多5位数

就算5位整数,还有符号位,小数点,2位小数,还有结束符0,越界了

使用特权

评论回复
24
比神乐|  楼主 | 2020-8-26 15:28 | 只看该作者
ayb_ice 发表于 2020-8-26 15:21
就算5位整数,还有符号位,小数点,2位小数,还有结束符0,越界了

我说最多5位整数,可调试时就一位整数。我截图给你看

使用特权

评论回复
25
比神乐|  楼主 | 2020-8-26 15:32 | 只看该作者

看,整数部分1位,是0.
0x0e是小数点。

使用特权

评论回复
26
ayb_ice| | 2020-8-26 15:35 | 只看该作者
本帖最后由 ayb_ice 于 2020-8-26 15:38 编辑
比神乐 发表于 2020-8-26 15:32
看,整数部分1位,是0.
0x0e是小数点。

你自己都指定了输出宽度,10位宽度,后面会自动补的
先把缓冲区搞长点,看调用sprintf后缓冲区的内容就清楚了

使用特权

评论回复
27
比神乐|  楼主 | 2020-8-26 15:37 | 只看该作者
ayb_ice 发表于 2020-8-26 15:35
你自己都指定了输出宽度,10位宽度,后面会自动补的

是吗?我再看看

使用特权

评论回复
28
香水城| | 2020-8-26 15:40 | 只看该作者
比神乐 发表于 2020-8-26 15:06
谢谢!我把s[8]改为s[18]就好了,可是我不懂为什么就好了。
你给我讲讲

明明数组越界了 还说没越界。可爱~

使用特权

评论回复
29
比神乐|  楼主 | 2020-8-26 15:44 | 只看该作者
ayb_ice 发表于 2020-8-26 15:35
你自己都指定了输出宽度,10位宽度,后面会自动补的
先把缓冲区搞长点,看调用sprintf后缓冲区的内容就清 ...

sprintf(s, "%-8.2f", ShiftValue0); //产生:" 123 4567"
我试了一下啊,-8.2f不行,
-7.2f就可以。
算了,写-5.2f吧。
谢谢大神

使用特权

评论回复
30
比神乐|  楼主 | 2020-8-26 15:46 | 只看该作者
香水城 发表于 2020-8-26 15:40
明明数组越界了 还说没越界。可爱~

版主出来了,我感到很荣幸。
我写-7.2f可以,如果是自动补全的话,也会溢出的吧。
我很想搞清楚,好几个高手帮我,可是我还是糊里糊涂,我太菜了

使用特权

评论回复
31
比神乐|  楼主 | 2020-8-26 15:51 | 只看该作者

我程序里有好多-10.2f这样的语句,都没问题。
我快崩溃了。

使用特权

评论回复
32
比神乐|  楼主 | 2020-8-26 15:54 | 只看该作者

我百度搜索的。
m表示打印宽度,可是打印出来没有那么宽。

使用特权

评论回复
33
香水城| | 2020-8-26 16:40 | 只看该作者
本帖最后由 香水城 于 2020-8-26 17:02 编辑

还有 就是注意堆栈溢出方面的问题,你可以把堆栈加大点比较测试下

使用特权

评论回复
34
比神乐|  楼主 | 2020-8-26 16:42 | 只看该作者
香水城 发表于 2020-8-26 16:40
还有 就是注意堆栈溢出方面的问题

嗯嗯

使用特权

评论回复
35
a13528442080| | 2020-8-27 09:33 | 只看该作者
解决了吗

使用特权

评论回复
36
比神乐|  楼主 | 2020-8-27 09:42 | 只看该作者

使用特权

评论回复
37
ayb_ice| | 2020-8-27 09:44 | 只看该作者
比神乐 发表于 2020-8-26 15:54
我百度搜索的。
m表示打印宽度,可是打印出来没有那么宽。

这样也溢出了,只是没有死机而已,不是溢出就一定会死机的
前面已经説了,你先把缓冲区设置大些,然后调用sprintf,再看缓冲区内容就知道了

使用特权

评论回复
38
比神乐|  楼主 | 2020-8-27 10:27 | 只看该作者
ayb_ice 发表于 2020-8-27 09:44
这样也溢出了,只是没有死机而已,不是溢出就一定会死机的
前面已经説了,你先把缓冲区设置大些,然后调 ...

谢谢!我看看

使用特权

评论回复
39
比神乐|  楼主 | 2020-8-27 10:41 | 只看该作者
ayb_ice 发表于 2020-8-27 09:44
这样也溢出了,只是没有死机而已,不是溢出就一定会死机的
前面已经説了,你先把缓冲区设置大些,然后调 ...

谢谢,我明白了,你真是个大神

使用特权

评论回复
40
lihui567| | 2020-8-27 11:30 | 只看该作者
你可以单步调试仿真,看看程序走到那个函数,进去后进入硬件错误中断了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则