slade 发表于 2025-3-6 13:28:06

FreeRTOS库函数版20220817,改成HUGE模式为什么不能运行了|不使用REMOVEUNUSED即可

一直想研究一下FreeRTOS,这几天刚好不忙,就翻出了之前买的STC大学计划实验箱9.4版2022-3-01
官网上下载的FreeRTOS-STC32G-CORE-V1.0.2-Library-DemoCode-20220817(函数库版)

用在STC实验箱9.4版上,LARGE模式下可以正常运行(数码管温度和时间显示正常),改成HUGE模式就能不能运行了(数码管不显示)

我改了如下部分,大家帮我看还有没有其他要改的




还有其他兄弟碰到这个问题吗?

另外:我试了一下寄存器版---FreeRTOS-STC32G-CORE-V1.0.2-DemoCode-20220609,也是改上面的这些地方,可以正常运行。




国芯人工智能 发表于 2025-3-6 13:33:00

关于FreeRTOS在STC32G-CORE平台上从LARGE模式切换到HUGE模式后无法正常运行的问题,可能涉及内存模型切换带来的指针大小和内存布局变化。HUGE模式下,指针从16位扩展至24位,可能导致原本在LARGE模式下正常使用的内存地址访问失效。建议检查以下几点:

1. **内存映射配置**:确保在HUGE模式下,内存映射配置正确,尤其是堆栈和任务控制块的地址范围。

2. **指针类型处理**:检查代码中所有指针相关操作,确保在HUGE模式下使用正确的指针类型和内存访问方式。

3. **编译选项**:确认编译器选项已正确设置为HUGE模式,且相关库函数支持该模式。

4. **调试信息**:通过调试工具查看程序运行时的内存状态和错误信息,定位问题所在。

建议参考STC官方文档和FreeRTOS移植指南,确保所有配置和代码修改符合HUGE模式的要求。

[本文内容由国芯人工智能辅助生成,仅供参考]

国芯人工智能 发表于 2025-3-6 13:38:00

在将FreeRTOS库函数版从LARGE模式切换到HUGE模式时,可能会遇到运行异常的问题。主要原因在于内存模型的差异,LARGE模式和HUGE模式对内存的访问方式和地址空间管理不同,可能导致代码和数据段的重定位出现问题。

建议检查以下方面:
1. **内存映射**:确保在HUGE模式下,代码和数据段的内存映射设置正确,特别是堆栈和全局变量的地址范围。
2. **编译器配置**:检查编译器的内存模型设置,确保所有模块和库文件都一致使用HUGE模式编译。
3. **链接脚本**:验证链接脚本是否适配HUGE模式,确保代码和数据段的分配符合预期。
4. **函数调用**:某些库函数可能对内存模型有依赖,需确认其是否支持HUGE模式。

建议参考STC官方文档和FreeRTOS的移植指南,确保所有配置和代码修改符合HUGE模式的要求。

[本文内容由国芯人工智能辅助生成,仅供参考]

slade 发表于 2025-3-6 13:46:23

国芯人工智能 发表于 2025-3-6 13:38
在将FreeRTOS库函数版从LARGE模式切换到HUGE模式时,可能会遇到运行异常的问题。主要原因在于内存模型的差 ...
AI别捣乱,用的就是STC官方移植的版本

hsrzq 发表于 2025-3-7 11:42:06

应该指针长度变了,有些直接操作寄存器的地方地址偏了

slade 发表于 2025-3-7 11:56:03

我用的是STC官方已经测试过的正式发布的版本FreeRTOS-STC32G-CORE-V1.0.2-Library-DemoCode-20220817,除了configUSE_ROMHUGE,没有改一行代码,
会不会是还有什么地方修改或配置的,我没有做?

王昱顺 发表于 2025-3-7 13:36:40

slade 发表于 2025-3-7 11:56
我用的是STC官方已经测试过的正式发布的版本FreeRTOS-STC32G-CORE-V1.0.2-Library-DemoCode-20220817,除了 ...



删除这个额外参数即可
HUGE模式下Keil编译对于这个指令的支持不是很好,所以会造成不能正常运行

slade 发表于 2025-3-7 16:00:36

王昱顺 发表于 2025-3-7 13:36
删除这个额外参数即可
HUGE模式下Keil编译对于这个指令的支持不是很好,所以会造成不能正常运行
...

果然,我搞了两天都没搞定,
谢了,兄弟
页: [1]
查看完整版本: FreeRTOS库函数版20220817,改成HUGE模式为什么不能运行了|不使用REMOVEUNUSED即可