微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 printf 进行 MPLAB X 冻结构建

如何解决使用 printf 进行 MPLAB X 冻结构建

我的设置是:

  • MPLAB X IDE v3.40
  • C30 编译器 v3.31
  • PIC24FJ128GA306

当我尝试使用 printf 时出现问题。我可以打印字符串但不能打印变量。

这一行是正确的:

printf("HI");

此行未正确构建:

unsigned int var;
var = 1; 
printf("%u",var);

相同的代码与其他 PIC (PIC24FJ512GA606) 和编译器 (XC16) 完美配合。 在这两个项目中,我们都使用来自同一个库 stdio.h

的 printf

当我尝试构建项目时出现问题。如果我使用 "printf("%u",var);"并构建它,IDE 挂起,我必须取消构建过程。之后我无法清理项目,IDE 会显示一个文本:

rm: no se puede borrar build/SF_Utility_v31_RS485/production/interrupts_remapped.o: Permission denied
rm: no se puede borrar build/SF_Utility_v31_RS485/production/mult.o: Permission denied
rm: no se puede borrar build/SF_Utility_v31_RS485/production/SF_debug.o: Permission denied
rm: no se puede borrar build/SF_Utility_v31_RS485/production/SF_formatter.o: Permission denied
rm: no se puede borrar build/SF_Utility_v31_RS485/production/SF_HAL_axis_references.o: Permission denied
rm: no se puede borrar build/SF_Utility_v31_RS485/production/SF_internal_comms.o: Permission denied

CLEAN Failed (exit value 1,total time: 123ms)

如果我转到该文件夹​​并尝试手动删除,则会出现一条消息说我无法删除它,因为“pic30-elf-gcc.exe”正在使用它。我必须关闭该进程,然后您可以使用“printf("Hi");”...

清理和重建项目

EDIT1:当我构建项目时,我可以观察到每个文件都被正确编译。问题出在链接器上...当我尝试构建项目时,它会在下一行挂起:

"C:\Program Files (x86)\microchip\MPLAB C30\bin\pic30-gcc.exe"   -omf=elf -mcpu=24FJ128GA306  -o dist/SF_Utility_v31_RS485/production/sf-device.production.elf build/SF_Utility_v31_RS485/production/DEE_Emulation/DEE_Emulation_16-bit_v2.2/DEE_Emulation_16-bit/DEE_Emulation_16-bit.o build/SF_Utility_v31_RS485/production/DEE_Emulation/DEE_Emulation_16-bit_v2.2/DEE_Emulation_16-bit/Flash_Operations.o build/SF_Utility_v31_RS485/production/RS485/SF_RS485.o build/SF_Utility_v31_RS485/production/src/ADC_Handler/ADC_Handler.o build/SF_Utility_v31_RS485/production/src/Event_Timer/osal_timers.o build/SF_Utility_v31_RS485/production/src/PWM/PWM_Core_Handler.o build/SF_Utility_v31_RS485/production/src/PWM/PWM_Func_Layer.o build/SF_Utility_v31_RS485/production/src/PWM/PWM_Hal_Layer.o build/SF_Utility_v31_RS485/production/HTS221.o build/SF_Utility_v31_RS485/production/LISXDH.o build/SF_Utility_v31_RS485/production/src/Tasks/LED_Status_Task.o build/SF_Utility_v31_RS485/production/src/Tasks/System_Task_Handler.o build/SF_Utility_v31_RS485/production/src/Tasks/Hum_Temp_Task.o build/SF_Utility_v31_RS485/production/configuration_bits.o build/SF_Utility_v31_RS485/production/main.o build/SF_Utility_v31_RS485/production/system.o build/SF_Utility_v31_RS485/production/traps.o build/SF_Utility_v31_RS485/production/user.o build/SF_Utility_v31_RS485/production/SF_controller.o build/SF_Utility_v31_RS485/production/SF_solar_calculations.o build/SF_Utility_v31_RS485/production/SF_solar_calculations_utils.o build/SF_Utility_v31_RS485/production/SF_time.o build/SF_Utility_v31_RS485/production/SF_tracker.o build/SF_Utility_v31_RS485/production/SF_settings.o build/SF_Utility_v31_RS485/production/SF_protocol.o build/SF_Utility_v31_RS485/production/SF_io_manager.o build/SF_Utility_v31_RS485/production/SF_inverter.o build/SF_Utility_v31_RS485/production/utils.o build/SF_Utility_v31_RS485/production/SF_main_loop.o build/SF_Utility_v31_RS485/production/SF_persistence.o build/SF_Utility_v31_RS485/production/SF_formatter_binary.o build/SF_Utility_v31_RS485/production/SF_GW_Common.o build/SF_Utility_v31_RS485/production/SF_tick.o build/SF_Utility_v31_RS485/production/mult.o build/SF_Utility_v31_RS485/production/SF_internal_comms.o build/SF_Utility_v31_RS485/production/interrupts_remapped.o build/SF_Utility_v31_RS485/production/SF_formatter.o build/SF_Utility_v31_RS485/production/SF_HAL_axis_references.o build/SF_Utility_v31_RS485/production/SF_debug.o        -legacy-libc -Wl,--defsym=__MPLAB_BUILD=1,--heap=1024,-Map="prueba.map",-Tp24FJ128GA306.gld

解决方法

我有解决办法。问题是我的项目激活了旧库...在项目配置中取消选中该选项,它现在可以正确运行。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。