2023-02-10 启动项目报错,内存溢出问题

<--- Last few GCs --->

[7800:0000017A59FE1200]     6674 ms: Scavenge 1252.5 (1292.3) -> 1252.5 (1292.3) MB, 70.9 / 0.0 ms  (average mu = 0.987, current mu = 0.943) allocation failure
[7800:0000017A59FE1200]     7843 ms: Mark-sweep 1827.7 (1867.5) -> 1487.0 (1532.6) MB, 611.8 / 0.0 ms  (+ 4.0 ms in 3 steps since start of marking, biggest step 3.6 ms, walltime since start of marking 1878 ms) (average mu = 0.826, current mu = 
0.737) allo

<--- JS stacktrace --->
FATAL ERROR: invalid array length Allocation failed - JavaScript heap out of memory
 1: 00007FF7A1B54C9F napi_wrap+111007
 2: 00007FF7A1AF8226 v8::base::CPU::has_sse+59910
 3: 00007FF7A1AF9126 node::OnFatalError+294
 4: 00007FF7A23D2ABE v8::Isolate::ReportExternalAllocationLimitReached+94
 5: 00007FF7A23B788D v8::SharedArrayBuffer::Externalize+781
 6: 00007FF7A22609DC v8::internal::Heap::EphemeronKeyWriteBarrierFromCode+1516
 7: 00007FF7A228559F v8::internal::Factory::NewUninitializedFixedArray+111
 8: 00007FF7A214A9A0 v8::debug::Script::GetIsolate+7280
 9: 00007FF7A1FD3F87 v8::internal::interpreter::JumpTableTargetOffsets::iterator::operator=+170247
10: 00007FF7A245B97D v8::internal::SetupIsolateDelegate::SetupHeap+465325
11: 00000299ED174005

错误代码是这样的,解决办法是在packjson文件下限制内存上限

在这里插入图片描述

在使用 STM32CubeMX 配置 RTOS(如 FreeRTOS)时出现错误,可能涉及多个方面的问题,包括配置选项错误、库版本不兼容、生成代码不完整或开发环境设置不当等。以下是一些常见的解决方法和建议,帮助用户排查和解决 STM32CubeMX F1 v1.8.0 配置 RTOS 时的报错问题: ### 1. 确认 STM32CubeMX 和 HAL 库版本兼容性 确保使用的 STM32CubeMX 版本(v1.8.0)与所选的 HAL 库版本兼容。若版本不匹配,可能会导致生成代码异常或 RTOS 配置失败。可以尝试更新 STM32CubeMX 到最新版本,并确保 HAL 库为最新稳定版本[^1]。 ### 2. 检查 RTOS 配置选项 在 CubeMX 中启用 FreeRTOS 时,需确保以下配置正确: - 在 **Middleware** 栏中选择 **FreeRTOS** 并启用它。 - 选择合适的调度器类型(如抢占式调度)。 - 设置合适的空闲任务堆栈大小和优先级。 - 确保系统时钟(SysTick)配置正确,FreeRTOS 依赖其进行任务调度[^1]。 ### 3. 验证系统时钟配置 FreeRTOS 依赖系统时钟(SysTick)来实现时间延迟和任务调度。在 CubeMX 中,确保 **System Core → SysTick** 的时钟源和中断频率配置正确,通常为 1ms 中断一次[^1]。 ### 4. 检查生成代码的完整性 在生成代码后,检查 `main.c` 和 `freertos.c`(或 `cmsis_os.c`)文件是否正确包含 FreeRTOS 初始化代码。例如,`osKernelStart()` 是否被正确调用以启动调度器。如果代码缺失或配置错误,可能导致运行时报错[^2]。 ### 5. 调整堆栈大小和内存分配 FreeRTOS 需要足够的堆内存来创建任务和队列。在 `FreeRTOSConfig.h` 文件中,检查 `configTOTAL_HEAP_SIZE` 是否设置合理,并确保 `heap_4.c` 或其他内存管理文件被正确包含到项目中。若堆栈溢出,可能导致系统崩溃或调度失败[^1]。 ### 6. 检查中断优先级分组 STM32 的 NVIC 中断优先级分组需与 FreeRTOS 的中断管理机制兼容。通常建议使用 **Group 4(4 bits for pre-emption priority, 0 bits for subpriority)** 模式。在 `main.c` 中调用 `HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_4);` 以确保中断优先级管理正确。 ### 7. 使用调试工具排查问题 若程序运行失败,使用调试器(如 ST-Link)连接目标设备,检查是否在 `osKernelStart()` 或其他关键函数中发生异常。观察寄存器状态和调用栈,有助于定位具体错误原因。 ### 示例代码:FreeRTOS 启动部分 ```c /* Init scheduler */ osKernelInitialize(); /* Create the thread(s) */ osThreadNew(StartDefaultTask, NULL, &defaultTask_attributes); /* Start scheduler */ osKernelStart(); ``` ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值