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.

[参考译文] RTOS/EK-TM4C1294XL:如何将 EMAC_CONFIG 寄存到栈中?

Guru**** 2442090 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/629950/rtos-ek-tm4c1294xl-how-is-emac_config-registered-to-the-stack

器件型号:EK-TM4C1294XL

工具/软件:TI-RTOS

 如何在 NDK 堆栈中注册 EMAC_CONFIG 中的回调和变量?

NDK 指南指出 CSL 层"在"EMAC_Config"数据结构中定义所需的回调函数、并要求驱动程序实现这些函数、并在"EMAC_open"调用期间向驱动程序注册这些函数。

EMAC_CALL 函数不在示例项目中。 它似乎包含在预构建的库中。 我认为这是因为注释掉 EMAC_CONFIG 会给出错误"unresolved symbol EMAC_CONFIG、first referenced in C:/ti/tirtos_tivac_2_16_00_08/products/tidrivers_tivac_2_16_00_08/packages/ti/drivers/lib/drivers_tivaware.aem4f HttpGET_EK_TM4C1294XL_TI C/C++问题"

这些库如何访问变量 EMAC_CONFIG?  EMAC_CONFIG 在.c 文件中声明、但在.h 文件中没有引用。 我认为变量必须在 .h 文件中包含"extern const EMAC_Config EMAC_config"、以便其他文件访问.c 文件内容。

我只能看到 #pragma DATA_SECTION 行中使用的 EMAC_CONFIG (EMAC_CONFIG、".CONST:EMAC_CONFIG")

 DATA_SECTION 告诉 EMAC_CONFIG 在哪里 ? 我希望这将出现在链接器文件 EK_TM4C1294XL.cmd 中、因为 Wiki 显示" IAR 链接器配置文件的已定义存储器段和 CCS 链接器命令文件的 MEMORY 部分    可分别与 constsig pragma 和 DATA_SECTION pragma 一起使用、以将变量放入特定存储器中 位置"。 我有误解吗?

不应使用 DATA_SECTION? 相同的 wiki 页面似乎暗示 LOCATION pragma 优于 DATA_SECTION:"不支持  LOCATION pragma 的旧 CGT 版本 v3.x、因此  可使用 DATA_SECTION pragma "- http://processors.wiki.ti.com/index.php/Placing_Variables_in_Specific_Memory_Location_-_MSP430#Using_DATA_SECTION_PRAGMA_With_Defined_Memory_Section_in_Linker_Command_File

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

    希望获得更多有趣的事实和文档资源。 对 CCS 的透彻理解将帮助我回答我自己的问题。

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

    尊敬的 Peter:

    EMAC_CONFIG 结构在"board.c"文件中定义、但在 tirtos_tivac_2_16_01_14\products\tidrivers_tivac_2_16_01_13\packages/ti\drivers\emac\emacSnow.c 文件中使用(我知道...可怕的名称)。

    如果您查看 EMACSnow 文件、您将看到该文件

    extern EMAC_Config EMAC_CONFIG;

    然后是对它的几个引用。 EMACSnow.c 是 TI-RTOS 驱动程序库的一部分(不要与 TivaWare driverlib...TI-RTOS 驱动程序构建在 driverlib API 之上)。

    在编写此文件时、我们应该在 EMACSnow.c 文件中使用"const"、这样可以获得更好的优化效果、并且很明显、我们不能更改任何值。 不过、我们不会修改结构...我不是编译器人员、因此我不确定它是否会对代码产生影响。

    我们讨论了是让 EMAC 驱动程序库引用应用程序必须定义的变量、还是让应用程序通过一个指向它的指针。 我们对前者作出了决定。 可能的原因是我们希望减少 API 的数量。

    Todd

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    此外、关于 #pragma 用法、有一个 TI 链接器问题、即使没有人引用该问题、也会引入某些代码。 例如、empty 正在拉取所有 EMAC/UART/I2C/等 代码。 添加 #pragma "fixed"该问题。 我不记得解决该问题的确切链接器版本。 IAR (或 GCC)编译器中不存在此问题。

    Todd
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    直到现在、我还没有想到雪花命名主题。 个人风格是一件好事。