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.

[参考译文] BQ79616EVM-021:rti_timeout allway = 0

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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/1334950/bq79616evm-021-rti_timeout-allway-0

器件型号:BQ79616EVM-021
主题中讨论的其他器件:LAUNCHXL2-TMS57012BQ79616-Q1BQ79600EVMHALCOGEN、BQ79616

您好!

我不熟悉 TI。

我已 将 LAUNCHXL2-TMS57012与 BQ79600EVM 评估模块和 BQ79616-Q1结合使用 。

我尝试编译并执行示例 bq79616_SAMPLE_CODE_PG2.0中的代码

为了能够使用 CCS Studio 编译代码、我必须更改编译器和链接器设置。

现在可以编译该项目了。

如果我开始执行、代码将淹没在下一行中:

  wake79616()
    void delayus (uint16 us)
      while (rti_timeout==0);

似乎 RTI_TIMEOUT 永远不会设置为!= 0。

我做错了什么?

提前感谢

哈利

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

    哈利、您好!

    您是否看到设备已唤醒? 您是否能够在调试器中运行代码并观察其单步执行的情况? 我想确认 RTI_TIMEOUT 正确卡住。  

    此致、

    安东尼·范

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

    Hallo Anthony、

    是的、可以分步调试和浏览代码。

      1. main 函数调用  wake79616函数
      2. wake79616函数调用 delayus (uint16 us)
      3.  delayus 函数内是 程序挂起时的循环 while (rti_timeout==0)。

    -------------------------------------------------------

    我认为问题在于 HALCoGen 中 RTI 的配置。

    我已将标记值从0.001替换为1.000、现在程序正在运行。  

    您能检查并确认值1.000是正确的值吗?

    提前感谢

    哈利  

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

    哈利、您好!

    让我来看看这个。 将会尽快更新。  

    此致、

    安东尼·范

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

    哈利、您好!

    我将此功能重新分配给支持  TMS570LS12 LaunchPad 的组。 如果有任何与 BQ79616相关的问题、请随时重新提交新的论坛问题。  

    此致、

    安东尼·范

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

    尊敬的 Anthony:

    我无法下载您的代码、

    但是请确保下列事项:

    1.确保调用以下 RTI 函数:

       rtiInit();

      rtiEnableNotification (rtiNOTIFICATION_COMPARE0);

       rtiStartCounter (rtiCOUNTER_BLOCK0);

    2.确保在代码中启用 IRQ 中断:  

      _enable_irq();
    3.确保 在 HALCoGen 中启用 RTI 比较0中断
    4.有关更多详细信息,请参考 HALCoGen 中的 rtiBlinky 示例:
    您可以按如下方式访问此示例:
    在这个例子中,你可以找到一步一步的过程和代码的 RTI blinky 示例。
    --
    谢谢。此致、
    Jagadish。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好  Jagadish:

    我添加了一个项目、以便您可以查看所有设置。

    1.它基本上是 TI 提供的一个示例项目。 我已经确认了您在信息中所做的1点至4点。 一切都好。

      所以我认为我从0001到1.000的解释和更正是正确的。

    2.您能看一下主函数吗?

      如果将 #define object_count 设置为大于40的值、则表示行为不可预测。 在最好的情况下、程序不运行、
      obj 的值。 v 为随机值。 我认为这是堆大小的问题。 您能帮助我设置正确的设置来解决这个问题吗?

    提前感谢

    哈利

    e2e.ti.com/.../_5F00_Test.zip

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

    哈利、您好!

    1.它基本上是 TI 提供的一个示例项目。 我已经确认了您在信息中所做的1点至4点。 一切都好。

      所以我认为我从0001到1.000的解释和更正是正确的。

    [/报价]

    我不认为0.001是错的。 如果我们配置0.001、则意味着我们正在生成1us 中断。 我认为这是正确的。

    我忘了提到下面的事情、请确保在 rtiNotification 函数中将 RTI_TIMEOUT 设置为1:

    如果将#define object_count 设置为大于40的值,则表示行为不可预测。 在最好的情况下,程序不运行,但有时[/引号]

    您的内存分配对我来说似乎是错误的。 请尝试执行以下操作:

    --
    谢谢。此致、
    Jagadish。

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

    Hallo Jagadish,

    1、我把1.000向上倾斜到0.001、现在它可以工作了。 魔法。 这是我的想象力的背后。 :-)
      该点已完成。  谢谢!  

    2.你是对的,我准备为你做一个小项目,这样你就可以看到问题,我做了打字错误。

      我更正了拼写错误、现在我有以下输出

    如果 object_count  = 20、则

    OBJ[5].V[2]= 3.060000,
    程序结束

    这是正常的!

    但是、如果 object_count  = 30、
    完全无输出

    如果  object_count  = 40、则

    OBJ[8].V[7]= 0.001953,
    OBJ[10].V[12]= 0.001953,
    OBJ[13].V[4]= 0.001953,
    OBJ[17].V[12]= 0.000488,
    OBJ[20].V[6]= 0.001953,
    程序结束

    它应该随时可用  

    OBJ[5].V[2]= 3.060000,

    因为  

    for (int i = 0;i<object_count;i++)
    {
    memset (&obj[i]。 V、0、16 * sizeof (float);

    将所有值设置为0

    and   obj[5].V[2]= 3.06 ; sets 3.V of the 6. 对象设为3.06。

    并且我打印输出仅为 V > 0.0001

    请查看所附的正确版本

    提前感谢
    哈利

    e2e.ti.com/.../6710._5F00_Test.zip

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

    我想它是 HALCoGen 的一些 thimg。

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

    或编译器

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

    Hallo  Jagadish,

    看起来像是在打电话

    obj =(Object*) malloc (object_count * sizeof (Object));

    仅当 object_count <= 20时传递有效指针在其他情况下返回 NULL 指针。

    这就是问题所在

    此致
    哈利

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

    哈利、您好!

    如果 object_count  = 20、则

    OBJ[5].V[2]= 3.060000,
    程序结束

    这是正常的!

    但是、如果 object_count  = 30、
    完全无输出

    [/报价]

    我了解了问题的根本原因。

     对于 malloc ()使用的 C 运行时存储器池、C/C++编译器使用一个未初始化的段.sysmem。  此存储器池的大小在链接时使用-heap_size 选项来设置。 链接器创建.sysmem 段的前提是输入文件中存在.sysmem 段。

    如果链接器 cmd 文件中未使用--help_size、或者未包括在 CCS 等选项中、则.sysmem 将使用0x800作为默认值。  

    您可以在映射文件中找到为系统分配的存储器、如图所示。

    0x800表示2048个字节、在本例中、一个对象数据大小等于64字节的(16*size of float)。 这意味着可以创建的最大理想对象数为2048/64、即32。 这是理想的做法、但整个.system 段将不会用于堆、因此它也可能低于30。

    此问题的解决方案是增加堆大小:

    转到项目属性并增加以下突出显示值:

    我要将此值增加到0x1000:

    一旦您更改了值 Do Clean Build of project、以使此设置受到影响:

    完成干净构建后、可以验证映射文件中配置了0x1000的.system 段存储器、如下所示:

    以前甚至有30个对象不适合我,但现在我配置了35个对象并验证了结果:

    现在、它可以正常工作、没有任何问题。

    --
    谢谢。此致、
    Jagadish。

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

    Hallo  Jagadish,

    这是可行的! 太棒了!

    我的 MCU 具有1280KB。

    输出文件为~ 400KB

    这是否意味着我有~ 800KB 的堆栈和堆内存?

    或者是否有其他一些要点需要考虑?

    最好的酒保
    哈利

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

    哈利、您好!

    我的 MCU 具有1280KB。

    输出文件为~ 400KB

    这是否意味着我有~ 800KB 的堆栈和堆内存?

    [/报价]

    您正在考虑这里的闪存、但堆栈和堆将存储在 RAM 中、而不是闪存中。

    如果您验证此器件的 RAM 大小、大约为192KB。 除了堆栈之外、相同的 RAM 内存也将用于.bss 和.data 段、它们的使用情况将根据应用程序而定、我的意思是在应用程序中声明的变量等。

    例如、如果您验证我的示例代码:

    此处.bss 段使用500 (0x1F4)字节、.data 段使用488 (1e8)字节、因此堆栈和堆可以配置为使用少988字节的192KB。

    --

    谢谢。此致、
    Jagadish。