gprof gnu profiling tools ?
i have folowed the "mcu on eclipse" instruction and with a few minor change i get it to work
basicaly what i did and changed
get all proiling subfolder from github source
in gmon.c
change the symbol used to "bound" the code "text" section
if (!already_setup) { extern char _etext; /* end of text/code symbol, defined by linker */ //MS the __etext is _etext on st ld file already_setup = 1; //MS 0x410 is not suitale for stm32f4 let use Reset_Handler that is just after isr table and low level init extern char Reset_Handler; monstartup((uint32_t)&Reset_Handler, (uint32_t)&_etext); }
in profile.c use a specific timer at 1KHz for prolining instead os systick (systick cant be cusotmized in cubemx project)
not ethat this timer get setup and started in main not best thing 😑
void TIM7_IRQHandler(void) { //void OSA_SysTick_Handler(void); static size_t pc, idx; //OSA_SysTick_Handler(); /* call normal Kinetis SDK SysTick handler */ if (prof.state==PROFILE_ON) { pc = ((uint32_t*)(__builtin_frame_address(0)))[14]; /* get SP and use it to get the return address from stack */ if (pc >= prof.lowpc && pc < prof.highpc) { idx = PROFIDX (pc, prof.lowpc, prof.scale); prof.counter[idx]++; } } //MS re-arm the specific profiler timer __HAL_TIM_CLEAR_IT(&htim7, TIM_IT_UPDATE); }
customize the system_stm32f4xx.c to init the profiling
best option would be to add "prof init" as part of the "lib init array" so that no files changes would be required
void SystemInit(void) { void _monInit(void); _monInit(); // ...
bad point is that semithosting "relative path" wan't let create a file in the project
So rigth now i had to force "gmon.out" to obsolute path where write is ok but's that very user specific 😑
void _mcleanup(void) { static const char gmon_out[] = "c:\\tmp\\gmon.out";
you can folow http://www.openstm32.org/forumthread164 to get semihosting working and news on the file path