在汇编里面做个EXPORT即可,比如startup_stm32h743xx.s汇编文件里,比如我这里使用了C微库,我这里放在if里面即可
[C] 纯文本查看 复制代码 ;*******************************************************************************
; User Stack and Heap initialization
;*******************************************************************************
IF :DEF:__MICROLIB
EXPORT __initial_sp
EXPORT __heap_base
EXPORT __heap_limit
EXPORT Stack_Size
EXPORT Heap_Size
ELSE
IMPORT __use_two_region_memory
EXPORT __user_initial_stackheap
__user_initial_stackheap
LDR R0, = Heap_Mem
LDR R1, =(Stack_Mem + Stack_Size)
LDR R2, = (Heap_Mem + Heap_Size)
LDR R3, = Stack_Mem
BX LR
ALIGN
ENDIF
END
然后C文件里面就可以调用了
[C] 纯文本查看 复制代码 #include <stdio.h>
// 使用 extern 声明栈和堆相关的符号(这些符号在启动文件中定义)
extern unsigned int Stack_Size; // 栈大小
extern unsigned int __initial_sp; // 栈顶地址 (对于Cortex-M,栈通常是向下生长的满栈)
extern unsigned int Heap_Size; // 堆大小
extern unsigned int __heap_base; // 堆起始地址
extern unsigned int __heap_limit; // 堆结束地址
void print_memory_info(void) {
// 计算栈的起始地址(栈底):栈顶地址 - 栈大小 + 1
// 注意:Cortex-M内核栈空间通常是向下生长的满栈:cite[1]
void* stack_base = (void*)((char*)(&__initial_sp) - Stack_Size + 1);
printf("Stack Info:\n");
printf(" Top (Initial SP): 0x%p\n", &__initial_sp);
printf(" Size: 0x%X bytes\n", Stack_Size);
printf(" Base (calculated): 0x%p\n", stack_base);
printf("Heap Info:\n");
printf(" Start (__heap_base): 0x%p\n", &__heap_base);
printf(" End (__heap_limit): 0x%p\n", &__heap_limit);
printf(" Size: 0x%X bytes\n", (char*)(&__heap_limit) - (char*)(&__heap_base));
}
|