This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] 编译器/TM4C123GH6PM:成功构建,但sprintf不工作

Guru**** 2568565 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/596292/compiler-tm4c123gh6pm-build-success-but-sprintf-not-working

部件号:TM4C123GH6PM

工具/软件:TI C/C++编译器

这是我的代码:


#include <stdlib.h>
#include <stdio.h>
#include <stdbool.h>
#include <stdint.h>
#include "inc/hw_memmap.h"
#include "inc/hw_types.h"
#include "driverlib/gPI.h"
#include "driverlib/pin_map.h"
#include "driverlib/rom.h"
#include "driverlib/sysctl.h"
#include "driverlib/UART.h"
#include "utils/uartstdio.h"
#include "driverlib/adc.h"

int a=100;
字符缓冲区[10];
内部长度;
void UART打印(car *cmd)

while (UARTBusy (UART0_BASE));
while (*cmd!='\0')

UARTCharPut (UART0_BASE,*cmd++);
}
//UARTCharPut (UART1_BASE,'\r');//CR
//UARTCharPut (UART1_BASE,'\n');//lf

}

无效delayms(UINT32_t Time)

SysCTlDelay (Time*(SysClockGatet()/3/1000));
}

int main (void){

SysCltlClockSet(sysctl_SYSDIV_4| sysctl_use_pll | sysctl_OSC主| sysctl_XTAL_16MHz);
SysCtlPeripheralEnable(sysctl_Periph_UART0);
SysCtlPeripheralEnable(sysctl_Periph_GPIOA);
GPIOPinConfigure(GPIO_PA0_U0RX);
GPIOPinConfigure(GPIO_PA1_U0TX);
GPIOPinTypeUART (GPIO _Porta_base,GPIO PIN_0 | GPIO PIN_1);
UARTConfigSetExpClk (UART0_BASE,SysClockSet(),11.52万,(UART_CONFIG_WLEN_8 | UART_CONFIG_STOP_ONE | UART_CONFIG_PAR_NONE);

UARTCharPut (UART0_BASE,'t');
sprintf (缓冲区,"%d",a);
同时(1)

UARTCharPut(UART0_base, buffer );
Delayms(500);

}
}



当我运行此代码时,UART的输出只有字母't',我看不到数字100。 PLZ帮助我(我英语差的SR)

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    请尝试以下操作:

    UARTCharPutt (UART0_BASE,'t');
    sprintf (buffer,"%d",a);
    用于(int I=0;i<strlen (buffer);i++)
    {
    UARTCharPutt (UART0_BASE,buffer[I]);
    delayms(500);
    }
    
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    奏效。 我使用了监视表达式,我发现缓冲区值内部没有任何值
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您可能需要增加堆。sprintf()是贪婪的。

    您还可以修改K&R的itoa()代码:

    /* itoa:将n转换为s */
    void itoa (int n,char s[])
    {
    一,签名;
    
    如果((SIGN = n)<0)/*记录符号*/
    n =-n; /*使n为正数*/
    I = 0;
    执行{ /*以相反顺序生成数字*/
    S[i++]= n % 10 +'0';/*获取下一位数*/
    } 同时((n /= 10)> 0); /*删除*/
    如果(符号< 0)
    S[I++]='-';
    S[I]='\0';
    reverse(s);
    }
    
    
    #include <string.h>/*
    
    reverse:reverse string s in place */
    void reverse(car s[])
    {
    int i,j;
    字符c;
    
    对于(i = 0,j = strlen (s)-1;I<j;I++,j-){
    c = s[i];
    s[i]= s[j];
    s[j]= c;
    }
    }