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.

[参考译文] TM4C129ENCPDT:uController 将挂起 sprintf 状态

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/923683/tm4c129encpdt-ucontroller-will-hang-on-sprintf-statment

器件型号:TM4C129ENCPDT

您好!

我正在尝试运行一个函数、该函数在其他方面经过测试、并且运行良好。 但是、如果我在 uController 上运行该函数。 uController 将挂起 sprintf 语句。

此函数实际上合并了两个数组、这样一个数组保存一个字符串、而另一个数组保存十六进制字符。 如果我在 Linux 机器上进行仿真、此函数将非常有效。

char generated_Hostname (char *标头、unsigned char * macaddr、char * GeneratedHostName)
{
char hex_tmp[50];
unsigned char i;
strcpy (GeneratedHostName,标头);//将主机名的标头(即 BECMS)复制到 GeneratedHostName
对于(i = 0;i < 4;i++){sprintf (&hex_tmp[i*2]、"%02x"、*(macaddr+i+2));}//转换从 MAC_Addr[2]开始到 MAC_Addr[5]的 macaddr 编号
strcat (GeneratedHostName、hex_tmp);

返回1;
} 

用户可以尝试简单地复制和粘贴以下代码、以快速查看函数本身的工作情况
#include 
#include 

#define HostNameHeader "TI_Device_"


char generate_Hostname (char *标头、unsigned char * macaddr、char *主机名)
{
char hex_tmp[20];
unsigned char i;
strcpy (主机名、标头);
对于(i = 0;i < 4;i++){sprintf (&hex_tmp[i*2]、"%02x"、*(macaddr+i+2));}
strcat (hostname、hex_tmp);
}

int main (void)
{

char hostname[50];
unsigned char MAC_Addr[6]={0xE0、0xC0、0x01、0x00、0xAF、0x60};

Generate_Hostname (HostNameHeader、&MAC_Addr[0]、hostname);
printf ("\n%s"、hostname);

return 0;
} 







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

    [引用用户="Sahil"]

    器件型号:TM4C129ENCPDT

    您好!

    我正在尝试运行一个函数、该函数在其他方面经过测试、并且运行良好。 但是、如果我在 uController 上运行该函数。 uController 将挂起 sprintf 语句。

    此函数实际上合并了两个数组、这样一个数组保存一个字符串、而另一个数组保存十六进制字符。 如果我在 Linux 计算机上进行仿真、此函数将非常有效。

    您可能是在以某种有用的方式实现 sprintf()的库中进行链接?

    它不仅仅是#include !! 您没有运行 Linux --您正在没有操作系统的微控制器上运行"裸机"。

    所有这些都说了-- TI 提供了一个称为"Micro Standard 库"的实用程序库,它实现了其中一些函数的简化版本。  它是 TivaWare 安装的一部分,您需要的特定函数称为 usprintf()。 在固件开发套件安装的 utils 目录中查找 ustdlib.c ustdlib.h、并将其添加到项目中。

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

    我将 sprintf 用于其他目的、它工作正常。

    让我尝试使用 printf(),并报告。

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

    [引用用户="Sahil"]

    我将 sprintf 用于其他目的、它工作正常。

    [/报价]
    定义"其他用途"。
    这是您的首个嵌入式控制器设计吗?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

     您可能没有足够的堆栈或其他一些内存问题。 这些标准 C 库函数(例如 sprintf)需要占用大量内存空间才能执行。 在任何情况下、我都建议您使用 TivaWare 库提供的 usprintf。 可在中找到它们 /utils/ustdio.c. 请参阅 TivaWare 实用程序用户指南。 下面是 usprintf()的摘录。