主题中讨论的其他器件:HALCOGEN
工具/软件:
您好!
我正在尝试实现一个 使用 sprintf()函数将数据打印到字符的代码。 当使用格式化输入(即:"...%u...")时、代码的执行将停止运行。 如果代码在此空闲阶段暂停、则 hl_sys_intvecs.asm 会在以下行打开:
b dataEntry。
进行分步调试时、我注意到在尝试执行赋值时、在_printfi.c 文件中的_pproc_fwp ()函数内触发了中断
*tmpptr = '\0';(我的案例中为第559行)。
我怀疑这可能与我 在 hl_sys_link.cmd 文件中配置存储器段的方式有关、因为我对我所做的事情没有信心:
/* */ /*----------------------------------------------------------------------------*/ /* USER CODE BEGIN (0) */ /* USER CODE END */ /*----------------------------------------------------------------------------*/ /* Linker Settings */ --retain="*(.intvecs)" /* USER CODE BEGIN (1) */ /* USER CODE END */ /*----------------------------------------------------------------------------*/ /* Memory Map */ MEMORY { VECTORS (X) : origin=0x00000000 length=0x00000020 KERNEL (RX) : origin=0x00000020 length=0x00008000 FLASH0 (RX) : origin=0x00008020 length=0x001F7FE0 FLASH1 (RX) : origin=0x00200000 length=0x00200000 STACKS (RW) : origin=0x08000000 length=0x00000800 KRAM (RW) : origin=0x08000800 length=0x00000800 RAM (RW) : origin=(0x08000800+0x00000800) length=(0x0007f800 - 0x00000800) /* USER CODE BEGIN (2) */ /* USER CODE END */ } /* USER CODE BEGIN (3) */ /* USER CODE END */ /*----------------------------------------------------------------------------*/ /* Section Configuration */ SECTIONS { .intvecs : {} > VECTORS /* FreeRTOS Kernel in protected region of Flash */ .kernelTEXT align(32) : {} > KERNEL .cinit align(32) : {} > KERNEL .pinit align(32) : {} > KERNEL /* Rest of code to user mode flash region */ .text align(32) : {} > FLASH0 | FLASH1 .const align(32) : {} > FLASH0 | FLASH1 /* FreeRTOS Kernel data in protected region of RAM */ .kernelBSS : {} > KRAM .kernelHEAP : {} > RAM .bss : {} > RAM .data : {} > RAM /* USER CODE BEGIN (4) */ .sysmem : {} > RAM .freertosStaticStack : {} > RAM .noinit : {} > RAM /* USER CODE END */ } /* USER CODE BEGIN (5) */ /* USER CODE END */ /*----------------------------------------------------------------------------*/ /* Misc */ /* USER CODE BEGIN (6) */ /* USER CODE END */ /*----------------------------------------------------------------------------*/
我正在运行的代码是一个简单的 sprint 示例:
uint8_t i = 2; char buffer[50]; int a = 10, b = 20, c; c = a + b; sprintf(buffer, "Sum of %d and %d is %d", a, b, c);
提前感谢您!