智能车制作

标题: 很急!IAR更改工程设置后K60烧不进程序 [打印本页]

作者: 快要夏天了    时间: 2016-2-14 16:17
标题: 很急!IAR更改工程设置后K60烧不进程序
file:///c:/users/tang/appdata/roaming/360se6/User Data/temp/160908fc4hr7y5zrg0xspm.jpg
我为了用sprintf函数让小液晶显示浮点,将printf formatter选为了FULL。
然后插上Jlink调试可以正常显示小数,但是断电再上电就又不能显示了。这等于程序根本没烧进去?
求解。
我只改了这个设置,改回原来的就完全没问题,但就不能显示浮点了。
[attach]83879[/attach]


作者: 好吃的都给你又    时间: 2016-2-16 02:05
第二页,选library选FULL,
sprintf效率太低了,所以嵌入式C里面都很少用这个函数的...


用这个吧,比sprintf好一点的
void LED_PrintValueF(unsigned char x, unsigned char y, float data, unsigned char num)
{
        unsigned char l,m,i,j,k;  //万千百十个
        unsigned char databiti = 6; //整数位数
        unsigned int tempdataui = 0;
          int tempdataii = (int)data; //整数部分
        long int tempdatalp = (long int)((data - (int)data)*10000); //取小数位后4位
       
        //整数部分显示
        if(data < 0.0000001)  LED_P6x8Char(x, y,'-');
        else LED_P6x8Char(x, y,'+');
        if(tempdataii < 0)tempdataii = - tempdataii;  //去掉整数部分负号
        tempdataui = tempdataii;
        l  = tempdataui/10000;
        m= (tempdataui%10000)/1000;
        i = (tempdataui%1000)/100;
        j = (tempdataui%100)/10;
        k = tempdataui%10;
        if (l != 0)  //五位
        {
                LED_P6x8Char(x+6,y,l+48);
                LED_P6x8Char(x+12,y,m+48);
                LED_P6x8Char(x+18,y,i+48);
                LED_P6x8Char(x+24,y,j+48);
                LED_P6x8Char(x+30,y,k+48);
        }
        else if(m != 0) //四位
        {
                databiti = 5;
                LED_P6x8Char(x+6,y,m+48);
                LED_P6x8Char(x+12,y,i+48);
                LED_P6x8Char(x+18,y,j+48);
                LED_P6x8Char(x+24,y,k+48);
        }
          else if(i != 0) //三位
          {
                  databiti = 4;
                   LED_P6x8Char(x+6,y,i+48);
                LED_P6x8Char(x+12,y,j+48);
                LED_P6x8Char(x+18,y,k+48);
          }
          else if(j != 0) //两位
          {
                    databiti = 3;       
                  LED_P6x8Char(x+6,y,j+48);
                LED_P6x8Char(x+12,y,k+48);
          }
        else        
        {
                databiti = 2;
                LED_P6x8Char(x+6,y,k+48);
        }       
        if(tempdatalp < 0)tempdatalp = - tempdatalp;        //去掉小数部分负号
        switch(num)
        {
                case 0: break;
                case 1:  LED_PrintValueFP(x + databiti * 6, y, (unsigned int)(tempdatalp / 1000),num);break;
                case 2:  LED_PrintValueFP(x + databiti * 6, y, (unsigned int)(tempdatalp / 100),num);break;
                case 3:  LED_PrintValueFP(x + databiti * 6, y, (unsigned int)(tempdatalp / 10),num);break;
                case 4:  LED_PrintValueFP(x + databiti * 6, y, (unsigned int)(tempdatalp),num);break;                                       
        }
}
作者: 快要夏天了    时间: 2016-2-18 15:27
好吃的都给你又 发表于 2016-2-16 02:05
第二页,选library选FULL,
sprintf效率太低了,所以嵌入式C里面都很少用这个函数的...

恩 多谢





欢迎光临 智能车制作 (http://dns.znczz.com/) Powered by Discuz! X3.2