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.

[参考译文] CCS/EK-TM4C1294XL:添加了 Visual Studio Code Not Working in Code Composer Studio ZNP_HOST_framework 命令行项目

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/937697/ccs-ek-tm4c1294xl-added-visual-studio-code-not-working-in-code-composer-studio-znp_host_framework-cmdline-project

器件型号:EK-TM4C1294XL
主题中讨论的其他器件:CC2538

工具/软件:Code Composer Studio

您好!

我将 ZNP-HOST_framework 项目"cmdline"与 TM4C1294XL、CCEM Booster Pack 和 CC2538配合使用。 我正在尝试将我之前在 Visual Studio (C++中)中编写的一些代码添加到此项目中。 我已经验证了我的代码在 Visual Studio 中是否正常工作。 我没有收到有关 Code Composer Studio 项目"cmdline"中新代码的任何错误或警告。 但是、我的代码在 Code Composer Studio 中无法正常工作。 基本上、我编写的代码使用预定义的值(而不是从微控制器获得的值)执行三边运算。 在使用微控制器中的实时值之前、我想确保它首先与理论值配合使用)。 我的代码使用"double"和"int"变量类型、我注意到 Code Composer Studio 代码主要使用"uintX_t"和"intx_t"、其中 X 为8、16、32或64。

我不确定我的代码为什么在 Code Composer Studio 中不起作用、但我怀疑这可能是因为 Code Composer Studio 无法识别数据类型"double"? 双精度数据是如何解释的? 我是否需要将数据转换为其他格式? 我应该提到我正在使用 RSSI 值,所以我需要保留负数和十进制值--我不能截断或舍入数字。 还有其他问题吗?

我已附加修改后的文件"cmdline.cppp"、其中包含我的所有代码。 在该文件中、我通过在变量名称和注释中写入我的名称、明确了我添加了哪些行。

谢谢!

-Tessa  

e2e.ti.com/.../cmdLine.c

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

    您好 Tessa、

    [引用 USER="Tessa Herzberger "]但是、我的代码在 Code Composer Studio 中无法正常工作。

    您能更详细地解释一下吗? 听起来代码编译正常、但当您运行应用程序时、它不会按预期执行?  

    谢谢

    Ki

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

    您好、Ki!

    它可以编译和编译、但当我运行程序时、它不会像我预期的那样执行。 例如、我应该得到8.5、我得到1、000、000。

    -Tessa

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

    感谢您的澄清。 这似乎不是工具问题。 我要将此主题移至器件论坛。 那里的专家可能会提供更多的建议。

    谢谢

    Ki

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

    您好、Ki!

    听起来不错! 我将等待其他人的回复。

    谢谢!

    -Tessa

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

    您好!

     我不知道 cmdline.c 的作用是什么? 这是我第一次看到该文件。 不确定我是否能提供任何帮助。 您要在哪个目标器件上运行此代码? 是 TM4C129还是 CC2538?

     首先、如果您在 TM4C129上运行代码、请记住、M4F 处理器仅支持单精度浮点。 请参阅以下摘录。  

    —用于精度(C float)数据处理操作的32位指令。
    —合并的乘法和累加指令提高了精度(熔合 MAC)。
    —硬件支持转换、加法、减法、可选累加乘法、
    除法和平方根。
    —硬件支持反常和所有 IEEE 舍入模式。
    —32个专用32位单精度寄存器,也可作为16个双字寄存器寻址。
    —去耦三级管道。

    其次、确保启用硬件浮点单元。

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

    您好、Charles!

    我正在使用来自 ZNP_HOST_framework ( https://www.ti.com/tool/TIDC-ZNP-HOST-SW3 ) Code Composer Studio 项目命令行的 cmdLine.cpp 文件。 我目前在 TM4C1294XL 上运行代码。 值得一提的是、我有一个 Booster Pack 通过 CC2538连接到 TM4C1294板。

    小数点的精度可以。 我的选项设置看起来与您的选项相同。 我附上了一张以防万一的图片。 我仍然无法获得与运行相同代码时在 Visual Studio 中获得的结果相同的结果。 您是否认为这可能是 double 至 int32_t 或 double 至 uint32_t 转换的问题? 我应该提到、我正在使用负数实现代码。 我不确定负数是否会改变任何内容(比如可能是使用补码还是其他内容? 或者、您认为这个问题可能是其他问题吗?

    谢谢!

    -Tessa  

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

    您好!

    为了调试这个问题、我不会运行成熟的项目(您在 VS 中测试过的项目)、而是运行该功能的一个子集。

    [引用 USER="Tessa Herzberger ">我不确定我的代码为什么在 Code Composer Studio 中不起作用、但我怀疑这可能是因为 Code Composer Studio 无法识别数据类型"double"? 双精度数据是如何解释的?
    如果您怀疑 TM4C 上的数据解释不正确、请尝试查看哪些数据解释不正确。
    例如、打印不同类型的各种值(uintx_t、double、float...)可能会有所帮助。 看看 VS 和 TM4C 之间是否存在差异。

    此致、
    Toby

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

    大家好、Toby!

    我意外点击了"已解决"按钮! 抱歉! 请忽略这一点。 我将在我的问题得到解决时通知您。 我目前正在打印许多输出。

    例如、在 TM4C1294XL 电路板上、我将获得:

    UNKNOWN_NODE_LOCESS[0]:0x4020DB96
    unknown_node_locations[1]:0x4021FDE7
    UNKNOWN_NODE_LOCES[2]:0xBFE371F0

    在 Visual Studio 中、我得到了正确的答案、即:

    未知节点位置= 8.42889、8.99591、-0.607658

    谢谢!

    -Tessa

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

    大家好、Toby!

    我尝试使用值为5.5或-5.5的不同变量来查看结果。 我附上了一张结果图片。 TSAA_TEST_*variable type*值使用5.5,TSAM_TEST_*variable*_negative 值使用-5.5  

    谢谢!

    -Tessa

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

    您好!

     您能否展示测试代码如何打印出上述值? 请注意、浮点值使用 IEEE-754表示法存储在计算机存储器中。 这是一个将浮点值转换为存储在存储器中的 IEEE-754格式的在线工具。

    https://www.h-schmidt.net/FloatConverter/IEEE754.html

     您还可以在表达式窗口下查看 CCS 中的变量。 在这里、我创建了一个名为 f_SP_Temperature2的浮点变量、并为其分配了-5.5值。 在表达式窗口中、我看到存储器中存储的0xC0B00000与在线工具相同。  

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

    您好!

     您能否展示测试代码如何打印出上述值? 请注意、浮点值使用 IEEE-754表示法存储在计算机存储器中。 这是一个将浮点值转换为存储在存储器中的 IEEE-754格式的在线工具。

    https://www.h-schmidt.net/FloatConverter/IEEE754.html

     您还可以在表达式窗口下查看 CCS 中的变量。 在这里、我创建了一个名为 f_SP_Temperature2的浮点变量、并为其分配了-5.5值。 在表达式窗口中、我看到存储器中存储的0xC0B00000与在线工具相同。  

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

    您好、Charles!

    这是我的代码。 对于这些变量、我所做的就是初始化它们、然后打印它们。 我已附上我的代码和结果的 pdf 文件。 我还附加了我的代码(cmdline.c)。 我查看了浮点数。 使用您建议的转换  器、对于浮点变量8.5和-8.5值、我分别得到2.515625和-2.515625、但这仍然不正确。

    谢谢!

    -Tessa

    e2e.ti.com/.../8078.cmdLine.c

    e2e.ti.com/.../Init_5F00_Printing_5F00_Results.pdf

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

    大家好、Charles!

    我应该提到的是,我正在使用 ZNP_HOST_framework ( https://www.ti.com/tool/TIDC-ZNP-HOST-SW3 )示例 Code Composer Studio 项目“cmdline",我只是将自己的代码添加到这个项目中。

    谢谢!

    -Tessa

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

    您好!

     我使用您的代码、如下所示。 当我编译时、我将看到以下五个警告。 您应该会看到相同的结果。 格式字符串转换期间不兼容。 请注意、我使用 printf。

    当我运行代码时、我可以生成与您相同的输出。 但是、当您与存储器中存储的内容进行比较时、它们会有所不同。 如上所述、我认为原因是格式字符串转换。 如果您查看变量 TSAA_TEST_FLOAT 的表达式窗口、则变量会正确存储在存储器中0x41080000、并且这与在线转换器工具匹配、同时在控制台上打印为0x40210000。 同样、最重要的是它是否正确存储在存储器中。 我不确定为什么您必须使用%02x 十六进制格式打印它们以获得浮动值、这会导致格式字符串转换不兼容。 您可能需要尝试拼写。 同样、这超出了 MCU 的范围。 为什么不只使用%02f 之类的内容打印它、在这种情况下、您将看到8.5或-8.5。  

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

    您好、Charles!

    我真的不需要将其打印到终端、我只是想用一种方法来验证我获得的结果是否正确。 使用您提供的信息、我确认我的 TSAA_TEST 变量在表达式窗口中生成正确的值、但打印仍然错误(同样、我不需要打印)。 但是、我确实注意  到变量 TESA_UNKNOWN_NODE_LOCATION 和 TESA_LQI_array 仍设置为其初始值(为零)、即使它们打印的值不是零。

    谢谢!

    -Tessa

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

    这不是我在使用你拥有的东西时看到的。  

    我刚才添加了  

    float TESA_UNKNOWN_NODE_LOCATION [3]={0、0、0};//由 Tessa 添加
    int32_t Tessa test_int32_t = 8.5;
    uint32_t Tessa 测试 uint32_t = 8.5;
    float TESA_TEST_float = 8.5;
    double TESA_test_double = 8.5;

    int32_t Tessa test_int32_t_negative =-8.5;
    uint32_t Tessa_test_uint32_t_negative =-8.5;
    float TESA_test_float_negative =-8.5;
    double TESA_test_double_negative =-8.5;

    内部
    main (空)

    //
    //从 PLL 以120MHz 运行。
    //

    G_ui32SysClock = MAP_SysCtlClockFreqSet ((SYSCTL_XTAL_25MHz |
    SYSCTL_OSC_MAIN | SYSCTL_USE_PLL |
    SYSCTL_CFG_VCO_480)、120000000);

    printf ("\t Tessa unknown_node_location[0]:0x%02x\n"、Tessa unknown_node_location[0]);
    printf ("\t Tessa unknown_node_location[1]:0x%02x\n"、Tessa unknown_node_location[1]);
    printf ("\t Tessa unknown_node_location[2]:0x%02x\n"、Tessa unknown_node_location[2]);
    printf ("\t Tessa test Int32:0x%02x\n"、Tessa test_int32_t);
    printf ("\t Tessa test uint32:0x%02x\n"、Tessa test_uint32_t);
    printf ("\t Tessa test float:0x%02x\n"、Tessa test_float);
    printf ("\t Tessa 测试 double:0x%02x\n"、TSA_TEST_double);

    printf ("\t Tessa test Int32否定版:0x%02x\n"、Tessa test_int32_t_negative);
    printf ("\t Tessa test uint32否定版:0x%02x\n"、Tessa test_uint32_t_negative);
    printf ("\t Tessa test float 否定值:0x%02x\n"、Tessa test_float_negative);
    printf ("\t Tessa 测试双负值:0x%02x\n"、Tessa 测试双负值);

    我在下面看到。 亲自试用。 我建议您在小型项目中运行测试代码、而不要将其嵌入4000行文件中。 这样调试就更容易了。  

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

    您好、Charles!

    我将我的 TESA_UNKNOWN_NODE_LOCATION 数组和相应的函数调用(三边函数)移动到不同的函数(从函数"mtZdoMgmtLqiRspCb"到函数"startNetwork")、它现在看起来运行正常。 但是、我仍然无法保存 LQI 变量 TSAM_LQI_ARRAY 中的正确值。 我需要从函数"mtZdoMgmtLqiRspCb"中获取此值、并将其保存到变量"Tessa LQI_array"中的全局值。 我不确定如何执行此操作、或者它为什么不起作用。

    谢谢!

    -Tessa

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

    您好!

     您使用 int64_t 声明变量 MCU 处理器是一个32位机器。 不支持64位。  

    int64_t Tessa LQI_array[4]={0、0、0};//由 Tessa 添加

      

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

    您好、Charles!

    我现在能够成功获得 LQI 值! 谢谢! 但是、我仍然遇到一些问题。 当我使用函数 convert_LQI_TO_RSSI 将 LQI 值("TSA_LQI_array"变量)转换为相应的 RSSI 值("TSA_TEST_RSSI_converation"变量)时。 我应该提到、我正在将"Tessa LQI_array"从 Int32_t 转换为浮点、"Tessa test_RSSI_conversion "是浮点。 我已附上我的 code.e2e.ti.com/.../8176.cmdLine.c

    谢谢!

    -Tessa

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

    大家好、Charles!

    我刚意识到我的代码中没有确切提到发生了什么! 抱歉!  当我使用 convert_LQI_TO_RSSI 函 数将 LQI 值("TSA_LQI_array"变量)转换为相应的 RSSI 值("TSA_TEST_RSSI_converation"变量)时、我在"Expressions"窗口中根本看不到变量"TSAM_TEST_RSSI_converation"发生变化。 尽管我在代码中修改它、但它在整个例程中保持不变。

    谢谢!

    -Tessa  

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

    为什么不在 convert_LQI_TO_RSSI 函数中单步执行。 RSSI 是否包含正确的值?

    浮点 convert_LQI_TO_RSSI (浮点 LQI)

    浮点 RSSI = 0;

    RSSI =(LQI *(ED_RF_POWER_MAX_DBM - ED_RF_POWER_MIN_DBM)/ 255)+ ED_RF_POWER_MIN_DBM;

    返回 RSSI;