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.

[参考译文] LP-EM-CC1314R10:奇怪的不同行为…

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

https://e2e.ti.com/support/wireless-connectivity/sub-1-ghz-group/sub-1-ghz/f/sub-1-ghz-forum/1509191/lp-em-cc1314r10-strange-different-behaviour

部件号:LP-EM-CC1314R10
主题中讨论的其他器件:CC1314R10SysConfig

工具/软件:

在 nortos 下运行代码时、一切看起来都正常。

当我尝试将该代码移植到 FreeRTOS 时、sprintf ()中出现异常。 我正在使用 GCC 并为该函数假设相同的库

两种情况下都使用、这对我来说似乎很奇怪。 当我逐步执行代码时、FreeRTOS 版本会继续运行、直到我点击 sprintf ()语句。

void xprint_int (int a){
//   内名;
   char outbuf[16];
   sprintf (outbuf、"%d"、a);
   xprint(outbuf);
}

xprint 只是 uart_write 的包装器、可以在此程序中用作纯文本。

当语句出现时、调试器似乎失去与电路板的接触、并且没有响应。

无法执行步骤 Ito sprintf 语句。

如果我在 sprintf 语句中"查看反汇编"、则可以执行机器指令。 下一步我要到 siprintf (), sprintf ():
然后再转到_svfiprintf_r (),_svfprintf_r ():

svfiprintf_r (),_svfprintf_r ():
0000c330:E92D4FF0 push.w{R4、R5、R6、r7、R8、 R9、R10、r11、r14}
0000c334:4698 mov R8、R3
0000c336:898B ldrh R3、[r1、#0xc]
0000c338:B09D SUB R13、#0x74 //这是导致 faultISR 的指令。

我无法想象减去寄存器会导致出现故障 ISR

没有源代码、因此必须了解编译器策略并使用 ARM 汇编器才能解决此问题。

这里发生了什么???

sprint f 尝试 sprint f ("%d"、a)、其中 AIS 是一个整数

Gullik

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

    忽略问题。

    FreeRTOS 缺乏经验。 我从使用 vtaskcreate()的 rfUartbridge gcc/freeRTOS 示例的主代码中又开始了两个任务。 我得到了三个任务:原始代码、我的 CLI 和一个只是等待一秒钟并闪烁一个 LED 的虚拟 Eth 任务。 一切似乎都在工作,但我得到了非常奇怪的行为。 当我从 vtaskcreate 更改为 pthreadcreate 时

    一切似乎都按预期工作,我没有得到一个陷阱在冲刺.. 据称、FreeRTOS 中的任务和线程相同、但使用了 SIC。

    每天都有一些要学习的东西。

    Gullik

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

    我现在已将应用程序移植到 FreeRTOS、但只存在一些小问题(包括学习)。

    我现在正在尝试从我的 CLI 显示系统的状态。在这样做时、我了解到我应该这样做

    调用 vTaskList(buffer ),其中 buffer 应该是一个大小合适的结果缓冲区。

    但是、编译时未定义 vTaskList、而是在"task.h"(即#include)中定义

    在 SDK 中启用此 FreeRTOS 调用的过程是什么?

    Gullik

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

    尊敬的 Gullik:

    感谢您分享第一个问题和解决方案。

    对于第二个问题:您得到的错误是什么?

    此致、
    Theo

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

    嗯、我无法编译...

    /home/webjorn/workspace_v12/rfUARTBridge_LP_EM_CC1314R10_freertos_gcc/Debug/../cmd.c:628:对`vTaskList'的未定义引用

    文档提示传递大小为#tasks x 40左右的可写缓冲区、并应提供一个包含任务信息的字符串。

    它在 ti/simplelink_cc13xx_cc26xx_sdk_8_30_01_01/source/third_party/freertos/include/task 中进行了定义。

    void vTaskList( char * pcWriteBuffer )特权函数;/* lint !e971仅允许字符串和单个字符使用非限定字符类型。 */

    configUSE_TRACE_FUNCTION 和 configUSE_STATS_FORMATION_FUNCTIONS 必须
     *两者都被定义为1以使此函数可用。  请参阅
     * FreeRTOS.org 网站的配置部分,了解更多信息。

    我应将这些定义放在哪里、不想弄清 SysConfig 或 TI 提供的资源

    我尝试在引用 VtaskList 的源文件中定义它们、然后是"include tasks.h"

    但这不能实现...

    当内核对象被"隐藏"并且实用程序不编译时、这很难调试

    因此这可能是 RTOS、RSX-11M 和 VMS 的错误选择要简单得多 :-)

    Gullik

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

    尊敬的 Gullik:

    我跟踪了这个问题、您需要在预定义符号中添加另一个全局定义、以便编译器包含函数。

    这是因为在 c 文件中、include 存在以下条件:

    根据文档、缓冲区应至少为40字节大、通常不建议将该功能用于生产。

    FreeRTOS 文档中的参考: https://www.freertos.org/Documentation/02-Kernel/04-API-references/03-Task-utilities/00-Task-utilities#vtasklist 

    此致、
    Theo

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

    非常感谢 Theo、

    工作完全像 described....no我至少可以看到我的任务..

    此致、

    Gullik