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.

[参考译文] LAUNCHXL-F28379D:在 F28379D Launchpad 上运行 FreeRTOS 项目

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1362165/launchxl-f28379d-running-freertos-project-on-f28379d-launchpad

器件型号:LAUNCHXL-F28379D

尊敬的社区:

我正在尝试在 F28379D Launchpad 上运行基本的 FreeRTOS 项目(闪烁 LED)。 我已复制并包含了  F2838x_C28x_CCS 的 C2000 ware FreeRTOS 演示中所有必要的 FreeRTOS 文件。 我在工程中使用默认的链接器 cmd 文件、即2837xD_FLASH_lnk_cpu1.cmd、而不是 FreeRTOS 演示中提供的文件(2838x_freertos_flash_lnk_CPU1)。 项目编译无误,但在调试时,任务永远不会执行,代码进入 main()中的 while 循环。 下面是代码片段:

////////////////////////////////////////////////////////////////////////////////////////////////////////////// Code start//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

#include "driverlib.h"
#include "device.h"
#include "freertos.h"
#include "task.h"#include


#define myBoardLED0_GPIO 34

uint32_t count = 0;
void myBoardLED0_GPIO_init (){
GPIO_setPadConfig (myBoardLED0_GPIO、GPIO_PIN_TYPE_STD);
GPIO_setQualificationMode (myBoardLED0_GPIO、GPIO_QUAL_SYNC);
GPIO_setDirectionMode (myBoardLED0_GPIO、GPIO_DIR_MODE_OUT);
GPIO_setControllerCore (myBoardLED0_GPIO、GPIO_CORE_CPU1);
}

TaskHandle_t myTask1Handle = NULL;


void myTask1 (void *p)
{
while (1)
{
计数++;
GPIO_togglePin (myBoardLED0_GPIO);
vTaskDelay (1000);// 1秒延迟
}
}
void main (void)
{
myBoardLED0_GPIO_init ();
xTaskCreate (myTask1、"Task1"、225、(void*) 0、1、&myTask1Handle);
vTaskStartScheduler();

while (1)
{

}
} 

////////////////////////////////////////////////////////////////////////////////////////////////////////////// 代码 end ////////////////////////////////////////////////////////////////////////////////////////

如果有人能告诉我我在这里遗漏了什么、那就太好了?

谢谢!




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

    您好!

    1)您的 main()缺少用于初始化设备和中断相关配置的函数调用。 这些可在数据表的 F2838x 示例

    2)在链接器文件中、确保定义了.freertosStaticStack 和.freertosHeap 段并将其分配在较低的64K RAM 存储器范围中。  configAPPLICATION_allocated_heap 需要设置为1、并且您需要在应用程序中声明该堆、并将其放置在 .freertosHeap 段中。 有关如何执行此操作的确切详细信息、您可以参阅 F2838x 演示中的 ex4。

    谢谢。

    阿纳维

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

    您好!

    在链接器文件中、堆栈和堆段需要在0x0000 - 0xFFFF 范围内。 您当前分配的 RAMLSxDxGSx 超出了此范围、因此需要更新。

    您是否能够暂停该程序并查看它停止的位置? 此时,"伯爵"和"伯爵2"的价值是什么?

    谢谢。

    阿纳维

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、今天我们
    感谢您的建议。 我根据你提到的内容修改了2837x_RAM_lnk_cpu1.cmd。 我还必须在 FreeRTOSConfig.h 中进行一些细微修改、以满足我的代码要求(我已经在配置文件中启用了软件计时器、即使我不在任何地方使用它)。 完成这些修改后、LED 能够成功闪烁。
    但是、当我从使用2837x_RAM_lnk_cpu1.cmd 切换到2837x_flash_lnk_cpu1.cmd 时、我遇到了问题。 尽管修改了内存区域并且没有生成错误,我还是在调试期间收到一个"没有源可用于_system_post_cinit ()"错误。 您能否就导致此问题的原因提供见解?

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

    您好!

    您能否将更新后的 main.c 和链接器文件

    谢谢。

    阿纳维