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.
工具与软件:
如果我要使用来自 FreeRTOS 的此驱动程序(nortos 示例编译/工作正常)、则会出现此错误。 开发板是 LP-AM263、
mcu_plus_sdk_am263x_09_02_00_56/source\freertos_fat/freertos-FAT/include/ff_stdio.h:155:10:错误:请为3个条目定义空格
#error 请为3个条目定义空格
触发它的代码是以下代码:
#if (( configNUM_THREAD_LOCAL_STORAGE_POINTERS - ffconfigCWD_THREAD_LOCAL_INDEX )< 3 )
#error 请为3个条目定义空格
#endif
我做了什么:
-修改了现有的 FreeRTOS 示例项目(mcan_external_read_write_am263x-lp_r5fss0-0_freertos_ti-arm-clang、运行正常、编译正常、CAN 正常)
-从 syscfg 中启用 freertos-fat (与 mmcsd 支持一起使用)-这些值与 mmcsd_file_io_am263x-lp_r5fss0-0_nortos_ti-arm-clang 示例中的值完全相同
-在 mmcsd nonrtos 示例中添加了路径(不确定 FreeRTOS 是否需要黄色的路径,不会少,错误在有和没有它的情况下是相同的):
我认为差异来自 configNUM_THREAD_LOGUD_STORAGE_POINTERS、因此对于 nonrtos 为7、对于 RTOS 为4
对于 RTOS、configNUM_THREAD_LOCAL_STORAGE_POINTS - ffconfigCWD_THREAD_LOCAL_INDEX = 1。
为了进行测试、我也针对 FreeRTOS 将此配置修改为7。 这样可以吗? syscfg 中是否有一个值可以设置此 FreeRTOS 配置值、而不是在 FreeRTOS-Kernel\include\freertos.h 中直接更改它?
比弹出的其他问题大:
首次引用了未定义的
符号
--- -------
FF_MMCSDDiskDelete ./syscfg/ti_drivers_open_close.o
FF_MMCSDDiskInit ./syscfg/ti_drivers_open_close.o
我将继续调试、但我希望有更多 SDK 知识的人能够在这两个问题上为我指明正确的方向-我不想在错误的情况下结束、我肯定需要带有 FreeRTOS 的 FreeRTOS FAT 驱动程序。 nortos 变体对我来说没有用。
此致
对于未定义的 FF 符号问题、库似乎也存在差异-默认情况下、链接器脚本是面向的
freertos.am263x.r5f.ti-arm-clang.release.lib
虽然有他们,我应该包括
freertos_fat.am263x.r5f.ti-arm-clang.release.lib。
但是、如果我这么做、我将会有其他错误:
首次引用了未定义的
符号
--- -------
向量(_V)
如果我同时保留它们(这应该是正常的)、它们之间将会发生冲突:
最好有一个 MMCSD 文件 IO 示例为 FreeRTOS ...
您好!
Unknown 说:在 syscfg 中是否有一个设置此 FreeRTOS 配置值的值、而不是直接在 FreeRTOS-Kernel\include\freertos.h 中更改它?
否、遗憾的是、目前 SYSCFG 仅限于应用程序配置、无法更改预构建的静态库(FreeRTOS_FAT 配置)。 在对库文件(在源/文件夹内部)进行更改后、需要重新编译库、然后重新编译应用程序。 在这里、您的 makefile 中需要 FreeRTOS_FAT 和 FreeRTOS 这两个库。 您还可以设置正确的计算 configNUM_THREAD_LOCAL_STORAGE_POINTS 至7.
mingguo Xu 说:我将继续调试、但我很感谢有更多 SDK 知识的人会在这两个问题上为我指明正确的方向-我不想在一个错误的情况下结束、我肯定需要 FreeRTOS FAT 驱动程序和 FreeRTOS。 nortos 变体对我来说没有用处。
我发现了一个类似的线程(针对几乎相同问题的另一个器件)。 这里的客户成功移植并获得了 FreeRTOS FAT、和 FreeRTOS 正在工作。
虽然我没有向 SDK 中添加 FreeRTOS_FAT 和 FreeRTOS 示例的时间表、但上面的线程提到了将该示例移植到 SDK 的步骤。
此外,我还附带一些来自 FreeRTOS_FAT 维护人员的回复,这些回复针对类似的查询:
此致、
Shaunak
上述链接(以及其他链接)之间没有冲突
freertos.am263x.r5f.ti-arm-clang.release.lib
和
freertos_fat.am263x.r5f.ti-arm-clang.release.lib。
需要这两个符号、但如果我将它们都添加到链接器依赖项中、则会出现此冲突:
因此,有两个定义的符号,这是不好的...
据我所知、两者均由 TI 制造、我无法重建。 或者我可以吗?
你(们)好
有任何相关更新?
对我来说、该示例并不重要、而是拥有此驱动程序:
在 FreeRTOS 下按预期工作。 现在仅在 nonrtos 下工作。
当前 SDK 不需要在链接下面提到添加锁定文件和计时器文件等操作、因为它们已经存在。
已经尝试了不同的库组合、即使不使用 freertos_fat.am263x.r5f.ti-arm-clang.release.lib、并通过调用 ff_xxxx 来生成缺失的符号。 将 C 文件添加到我的项目中、但这些文件都无法正常工作(使用后一个文件时、我遇到了 FreeRTOS 队列错误)。
此致。
尊敬的 Brown59592:
我遇到了与您相同的问题(分享这些步骤仅供参考)。 我对 FreeRTOS FAT 库 makefile 进行了一些更改、该更改导致与 FreeRTOS 库中的 tasks.c 发生重新定义冲突。
步骤:
1.在 C:\ti\mcu_plus_sdk_am263x_09_02_00_56\source\kernel\freertos\config\am263x\r5f\freeRTOSConfig.h 中、 更改的值 configNUM_THREAD_LOCAL_STORAGE_POINTS 至7.
2.使用以下命令从顶级 MCU-PLUS-SDK 文件夹重新编译 FreeRTOS 库:
# TO CLEAN gmake -sj -f makefile.am263x freertos_r5f.ti-arm-clang_clean # TO BUILD gmake -sj -f makefile.am263x freertos_r5f.ti-arm-clang
3.在 FreeRTOS_FAT 库的 makefile 内、进行以下更改:
3.1打开以下位置的 makefile: c:\ti\mcu_plus_sdk_am263x_09_02_00_56\source\fs\freertos_fat\makefile.am263x.r5f.ti-arm-clang
3.2、从中删除 文件_常用 列表中、删除 portable.c 并添加 ff_time.c 和 ff_locking.c
3.3在 files_path_common 列表中、 移除可移植/不可移植路径并添加 FreeRTOS 包含路径、确保您的 files_path_common、include_common 和 files_common 外观类似:
FILES_common := \ ff_crc.c \ ff_dir.c \ ff_error.c \ ff_fat.c \ ff_file.c \ ff_ioman.c \ ff_memory.c \ ff_stdio.c \ ff_string.c \ ff_sys.c \ ff_format.c \ ff_mmcsd.c \ ff_locking.c \ ff_time.c \ FILES_PATH_common = \ ${MCU_PLUS_SDK_PATH}/source/fs/freertos_fat/FreeRTOS-FAT \ ${MCU_PLUS_SDK_PATH}/source/fs/freertos_fat/portable \ ${MCU_PLUS_SDK_PATH}/source/kernel/freertos/FreeRTOS-Kernel/include \ ${MCU_PLUS_SDK_PATH}/source/kernel/freertos/portable/TI_ARM_CLANG/ARM_CR5F \ ${MCU_PLUS_SDK_PATH}/source/kernel/freertos/config/am263x/r5f \ INCLUDES_common := \ -I${CG_TOOL_ROOT}/include/c \ -I${MCU_PLUS_SDK_PATH}/source \ -I${MCU_PLUS_SDK_PATH}/source/fs/freertos_fat/FreeRTOS-FAT/include \ -I${MCU_PLUS_SDK_PATH}/source/fs/freertos_fat/config \ -I${MCU_PLUS_SDK_PATH}/source/fs/freertos_fat/portable \ -I${MCU_PLUS_SDK_PATH}/source/kernel/freertos/FreeRTOS-Kernel/include \ -I${MCU_PLUS_SDK_PATH}/source/kernel/freertos/portable/TI_ARM_CLANG/ARM_CR5F \ -I${MCU_PLUS_SDK_PATH}/source/kernel/freertos/config/am263x/r5f \
3.4现在应重新编译您的 FreeRTOS_FAT 库
# TO CLEAN gmake -sj -f makefile.am263x freertos_fat_r5f.ti-arm-clang_clean # TO BUILD gmake -sj -f makefile.am263x freertos_fat_r5f.ti-arm-clang
4.我附上基于 mmcsd_file_io FreeRTOS 的工程的 ZIP 文件、其中包含更新的 makefile、以同时包含 FreeRTOS 和 FreeRTOS_FAT 库。 请将其粘贴到以下路径中: C:\ti\mcu_plus_sdk_am263x_09_02_00_56\examples\drivers\mmcsd\mmcsd_file_io\am263x-LP
e2e.ti.com/.../r5fss0_2D00_0_5F00_freertos.zip
我遇到了与信标相关的 ff_locking 错误。 似乎信标尚未初始化、我们直接尝试挂起信标。 在 NoRTOS 的情况下、所有这些函数不执行任何操作、所以我们没有错误。
我已经提出了一个内部要求,一旦我有一个修复版本,我会让你知道相同的。
此致、
Shaunak
由于你的说明、设法重新编译 FreeRTOS 和 FreeRTOS FAT (附加步骤与将 TI 目录中的 gmake 添加到路径中并根据我安装的版本更改 make 文件 CCS 目录相关)。
我只是不能复制示例中的项目。 是否可以轻松地根据创建未在 CCS 新建工程向导中列出的工程和示例? (无法通过编辑 json 使其生效、因为无论我在本地 .metadata\.tirex\am263x.content.tirex.json 中执行什么操作、项目向导都将使其联机。) 导入功能也不起作用、因为它不是普通工程。
尊敬的 Brown59592:
[报价 userid="5959592" url="~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1374459/mcu-plus-sdk-am263x-freertos-fat-driver-is-not-working-from-freertos-buggy/5263755 #5263755"]由于您的描述、已被管理重新编译 FreeRTOS 和 FreeRTOS 胖(其他步骤与将 gmake 从 TI 目录添加到路径中并根据我安装的版本更改 make 文件 CCS 目录相关)。[/QUOT]很高兴知道这个!
我无法根据此处复制的示例创建项目。 是否可以轻松地根据创建未在 CCS 新建工程向导中列出的工程和示例? (无法通过编辑 json 使其生效、因为无论我在本地 .metadata\.tirex\am263x.content.tirex.json 中执行什么操作、项目向导都将使其联机。) 导入既不起作用、也不起作用、因为它不是普通项目。
Im 对此并不是很确定。 我能够将我的项目导入 CCS 中。
我已经附加了我的 CCS 存档 zip 文件。
请按照以下步骤在 CCS 中导入内容:
1.下载 Zip
在 CCS 工程浏览器中、选择"import"、然后选择"import archive file"并导航到下载的 zip 文件。
3、导入成功后、右键单击项目属性、转至 C/C++ Build、然后转至 Environment、在此根据您的构建系统检查并修改路径。
4.尝试构建您的示例。
注意:该示例完全起作用、我刚刚创建了一个同时包含 FreeRTOS 和 FreeRTOS_FAT 库的示例。 我遇到了与 FreeRTOS 队列和信标相关的应用级问题。 以上示例适用于 AM263x-LP
此致、
Shaunak
你(们)好
我认为区别在于编译器和 SDK。
编译控制台:
"当前未安装 product com.ti.mcu_plus_sdk_AMXXX v7.3.0.01、没有兼容版本可用"
我切换到了可供下载的版本:
此错误会给出一些误差:
../main.c:34:10:致命错误:未找到"kernel/DPL/DebugP.h"文件
SYSCFG/ti_power_clock_config.c:35:10:致命错误:未找到"kernel/DPL/DebugP.h"文件
mmcsd_file_io_am263x-lp_r5fss0-0_freertos_ti-arm-clang/Release/syscfg/ti_drivers_config.h:41:10:致命错误:未找到"drivers/hw_include/cslr_soc.h"文件
有些不了解 DebugP 1、因为 ${MCU_PLUS_SDK_PATH}/source 位于路径中、而 debugP.h 位于该路径中。
此外、驱动程序中还提供了 cslr_soc.h。
尊敬的 Brown59592:
即使是在新的工作区中、我也无法重现上面报告的错误。
此邮件给出一些错误:
../main.c:34:10:致命错误:未找到"kernel/DPL/DebugP.h"文件
SYSCFG/ti_power_clock_config.c:35:10:致命错误:未找到"kernel/DPL/DebugP.h"文件
mmcsd_file_io_am263x-lp_r5fss0-0_freertos_ti-arm-clang/Release/syscfg/ti_drivers_config.h:41:10:致命错误:未找到'drivers/hw_include/cslr_soc.h'文件[/QUOT]在工程属性本身中、您是否可以一次性检查所有编译器包含路径并重新构建您的示例?
此致、
Shaunak
你(们)好
仅选择官方 SDK 是不够的、MCU_PLUS_SDK_PATH 不会自动更新:
必须将该值更新为 ${COM_TI_MCU_PLUS_SDK_AM263X_INSTALL_DIR}、因为这是官方 MCU PLUS SDK 的路径。
现在、它会编译、但我还会收到您之前提到的信标错误:
[Cortex_R5_0]置位:0.15691s:D:/ti/mcu_plus_sdk_am263x_09_02_00_56/source/fs/freertos_fat/FreeRTOS-FAT/ff_locking.c:FF_PendSemaphore:95:(uint32_t)(pxSemaphore)失败!!
此致、
我想我找到了缺失的信标:
如果您检入搜索结果 mcu_plus_sdk_am263x_09_02_00_56\source\fs\freertos_fat\portable\ff_mmcsd.c 不会创建该信标、因为:
/*驱动程序是可重入的、因此 xBlockDeviceIsReentrant 可以设置为 pdTRUE。
*在这种情况下,信标仅用于保护 FAT 数据
*结构。 */
xParameters.pvSemaphore = NULL;
xParameters.xBlockDeviceIsReentrant = pdFALSE;
但 RAMDISK 等所有其他实现都可以。
现在、要么其余的代码不符合 xBlockDeviceIsReentrant = false (因为在这种情况下不会使用信标)、这种语句是不正确的、应该像针对每种其他情况一样创建信标。
通过 MMCSD 驱动程序使用真实 SD 卡时、FreeRTOS-FAT 驱动程序实施是否存在任何问题?
对我来说、使其不可重入(仅在需要时使用1个线程的 SD 卡)不会是一个巨大的问题、但我需要知道此决定背后的原因、然后才能跳转至修改和崩溃其他内容
您能检查一下吗?
编辑:作为一个快速测试的缘故,我确实改变了信标初始化到递归互斥体从 ramdisk 和我得到 "所有测试通过",所以它可能是好的,但我仍然希望确认...
而且仍然不完整、如果我添加更多任务(这与 MMCSD 无关、可能只是功耗更大)、有时我会在更改 SD 的电流限制时遇到失败(mmcsd_v1.c):
这将导致 MMCSD_Close 中再次断言删除队列(可能是我在 ff_mmcsd.c 中创建的信标)
更有趣的是,如果我在调试中编译它,我仍然有这个问题与800mA 限制,而如果我做一个分步调试的第一次运行失败在这一行,比下一个运行将是可以的(即使它不是分步),直到下一个 POR :)可能是一些时间或电流峰-没有想法...
编辑:奇怪、但原因是 B16上缺少 SD 使能 GPIO 上拉电阻。 添加后、它开始正常工作。
关于信号量的问题仍然有效、前一条目以及此处缺少的"TODO"清除代码以及 MMCSD_Close 中的断言(如果此 init 中发生任何类型的错误)。
尊敬的 Barna Csenteri:
QJ Wang、您能否为 MMCSD 驱动程序问题提供帮助。
此致、
Shaunak
尊敬的 Barna:
抱歉、由于一些高优先级的问题、我还没有研究过、对于与 MMCSD 相关的问题、我建议创建一个新主题、由 MMCSD 专家处理。 这个线程好像失去了牵引力、因为它被分配给了 FreeRTOS 专家。
此致、
Shaunak
你(们)好
工作期间-这是 B16上缺少 SD 使能 GPIO +之前讨论的更改。 它在某种程度上没有它的工作,但它必须启用全速工作。
此致
尊敬的 Barna:
很高兴知道我们现在没有被阻止。
此致、
Shaunak
你(们)好
还有一个 FreeRTOS 比较粗的问题-如果您需要新的问题、请告诉我。
长度超过12个字符的文件名似乎无法正常工作。
我不确定这是否来自 8.3短文件名格式、因为"cust_config.h"我可以创建它、即10.1
我做了什么:
- 打印文件名以确保其正常:[%s]生成[longfilename.testing]
-用 ff_fopen(文件名,"w")创建文件+在其中写入一些东西,而不是关闭
-使用 FreeRTOS CLI dir 命令检查 Windows 上的文件
重现的最简单方法是使用示例 mmcsd_file_io_am263x-lp_r5fss0-0_freertos_ti-arm-clang (以及我们先前为 FreeRTOS 修改的 SDK)并替换以下行:
char filename[]="/sd0/file.dat";
或者会与
char filename[]="/sd0/longfilename.testing";
所有短于或等于8.3格式的文件名都是可以看到的、如果长了、则不会显示错误、但文件名 中都是 japanase/chinese 字符、如下所示:
CLI:
窗口:
您可以看到、创建的文件是正常的(代码是相同的、只是文件名不同)、并且对 longfilename.testing 进行了 trashed。
还有其他文件我甚至不能删除他们甚至在 Windows 下-可能我将不得不格式化 SD
尝试使用 ffconfigINCLUDE_SHORT_NAME 0和1 -没有区别。
只是为了测试我在 Windows 上复制了 一个名为"longfilename.coped"的文件, 它 在 CLI dir 命令中可见,也在 Windows 屏幕截图上可见,所以这个问题可能是仅与 ff_fopen 有关。
C:\ti\mcu_plus_sdk_am263x_09_02_00_56\source\fs\freertos_fat\config\FreeRTOSFATConfig.h:
#define ffconfigBYTE_ORDER (pdFREERTOS_LITT_ENDIAN)
#define ffconfigHAS_CWD (1U)/* 0 =仅使用绝对路径*/
#define ffconfigCWD_thread_local_index (4U)
#define ffconfigLFN_support (1U)
#define ffconfigINCLUDE_SHORT_NAME (0U)
#define ffconfigSHORTNAME_CASE (0U)
#define ffconfigUNICODE_UTF8_SUPPORT (1U)
#define ffconfigFAT12_support (0U)
#define ffconfigOPTIMIZE_UNALIGN_ACCESS (1U)
#define ffconfigCACHE_WRITE_Through (0U)
#define ffconfigWRITE_Both_FATS (1U)
#define ffconfigWRITE_FREE_COUNT (1U)
#define ffconfigTIME_support (0U)
#define ffconfigREMOVABLE_media (1U)/*假设媒体始终可移除*/
#define ffconfigMOUNT_find_free (1U)
#define ffconfigFSINFO_trusted (1U)
#define ffconfigPATH_cache (0U)
#define ffconfigPATH_cache_depth (0U)/*仅在 ffconfigPATH_cache 为1时才使用*/
#define ffconfigHASH_cache (0U)
#define ffconfigHASH_function (0U)/*仅在 ffconfigHASH_cache 为1时使用*/
#define ffconfig64_NUM_SUPPORT (1U)
#define ffconfigDRIVER_BUSY_SLEEP_MS (40)
此致、
尊敬的 Barna:
您可以就新问题提出新的 E2E 吗?
此致、
Shaunak
停止更新的。
e2e.ti.com/.../mcu-plus-sdk-am263x-free-rtos-fat-long-filenames-not-working
尊敬的 Barna:
感谢合作、我将跟进另一个主题。
此致、
Shaunak