[ARM7] LPC2368串口发送浮点数

[复制链接]
1341|4
 楼主| kerby81 发表于 2015-4-24 15:17 | 显示全部楼层 |阅读模式
/*
** 发送一个字符
*/
void UART0Putch(uint8 dat)
{
        U0THR = dat;
        while((U0LSR&0x40) == 0);
}
/*
** 发送一个字符串
*/
void UART0_SendStr(char *str)
{
        while(1)
        {
                if(*str == '\0')
                {
                        break;
                }
                UART0Putch(*str++);
        }
}
/*
** 发送一个浮点数
*/
void UART0_SendFloat(fp32 fData)
{
        char *str;
       
        sprintf(str, "%08.2f", fData);   //将浮点数转换成字符串格式并赋给str
        UART0_SendStr(str);
}

代码如上所示,发送字符和字符串的函数都可以正常使用,但是一调用UART0_SendFloat(fData),系统就会崩溃,请问是什么原因?


airwill 发表于 2015-4-26 07:32 | 显示全部楼层
看来还是新人呀.
那是因为你的 *str  没有初始化就使用了.
这是所谓的野指针, c 指针使用的大忌!

char *str;
可以改成 char str[32];
 楼主| kerby81 发表于 2015-4-26 15:07 | 显示全部楼层
airwill 发表于 2015-4-26 07:32
看来还是新人呀.
那是因为你的 *str  没有初始化就使用了.
这是所谓的野指针, c 指针使用的大忌!

试过了,还是一样
airwill 发表于 2015-4-26 17:52 | 显示全部楼层
应该 sprintf 的问题.
1. 或许 sprintf 需要的缓冲很大, 32 byte 或许还不够. 不过设置大了, 又怕你的堆栈不够. 可以再设置大一些, 放到函数外面, 变成全局变量, 试试看. LPC2368 的 SRAM 还是蛮大的, 修改启动文件, 把堆栈设置大一些.
2. sprintf 执行非常慢, 你可能调用它的频率太高, 导致程序卡在那里了.

评分

参与人数 1威望 +2 收起 理由
kerby81 + 2 很给力!

查看全部评分

 楼主| kerby81 发表于 2015-4-26 21:16 | 显示全部楼层
airwill 发表于 2015-4-26 17:52
应该 sprintf 的问题.
1. 或许 sprintf 需要的缓冲很大, 32 byte 或许还不够. 不过设置大了, 又怕你的堆栈 ...

嗯嗯,我后来发现了,因为用自己写的转换函数可以实现,所以就是sprintf之类的函数产生的问题
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:为梦想献身,向青春致敬

19

主题

190

帖子

4

粉丝
快速回复 在线客服 返回列表 返回顶部