打印
[ARM7]

LPC2368串口发送浮点数

[复制链接]
916|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 很给力!
5
kerby81|  楼主 | 2015-4-26 21:16 | 只看该作者
airwill 发表于 2015-4-26 17:52
应该 sprintf 的问题.
1. 或许 sprintf 需要的缓冲很大, 32 byte 或许还不够. 不过设置大了, 又怕你的堆栈 ...

嗯嗯,我后来发现了,因为用自己写的转换函数可以实现,所以就是sprintf之类的函数产生的问题

使用特权

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

本版积分规则

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

19

主题

190

帖子

4

粉丝