With a support entitlement you can also get direct access to our team of highly-qualified Arm experts 24-hours a day
Open a support case
Hey! I am working on Streamline Performance Analyzer for Bare Metal Support.
Generated Barman files (Linear RAM Buffer) for cortex - R7 with 7 PMU counters, compiled them separately with armcc to create a library file.
My project code is also compiling with armcc and to enable the frame pointer, I have used --use_frame_pointer instead of --fno-fomit-frame-pointer as it is used for armclang.
The readings for PMU counters are visible in the timeline view, but the function view, call path view and code view are not showing function names rather only one function row with unknown_code_in_unresolved giving the complete 100% to its execution.
I am using ultimate version for DS-5.v5.28.1 for streamline.
Compiling my code on a different platform. Executing the .axf generated (after compiling) on my target and storing the buffer generated into a .raw file.
Does anyone know what is it that I am doing wrong?
Attached are the function and call path views image.
Hi Anudhi,Thank you for getting in touch. Would it be possible to know the steps that you went through when you generated the barman.c and the barman.h files? As well as where you are putting your instrumentation in your code. The more information we know about your system the better.At the moment the worrying things are that you are only collecting 1 sample for the whole system. Is this expected or another system of your issue?A few more questions that will help us diagnose your issue:How are you sampling are you calling barman_sample_counters or barman_sample_counters_with_program_counter?What arguments do you pass your sampling function?Does you .axf file have symbols?When setting up barman.c and barman.h what did you set your max mmap layout records to?There is an introduction video on how to use the Streamline Bare-metal feature that may help located here: developer.arm.com/.../streamline-bare-metalOne final thing: If you are using DS-5 Ultimate with a licence you are entitled support and you may get a quicker resolution using those support channels.Hope this helps,Stephen
Thank you for your response. I figured out what I was doing wrong and I could now see some profiling data visible in the code view and Function view with function names but it still does not list the data of all the functions.
I still have few questions based on my implementation:
For generating barman files, I have followed the same steps as shown in the video you mentioned. Linear RAM Buffer with Number of tasks as 258-> Cortex R7 -> Selected 7 PMU counters -> NO Custom Counters -> Generated.
For instrumentation, I have created a new implementation file, where I am calling the initialize function and passing the buffer, buffer length (2MB), Clock Info, and Task Info.
For interrupts, I have created a periodic timer of 200 micro seconds and in the timer handler I am calling the API - barman_sample_counters_with_program_counter with link register as the argument.
yes my .axf have symbols.
No my question is: I am not getting the data for all the functions that were hit during the start of execution till the copying of buffer data into a raw file. Instead I am only getting the profiling data of functions at which the timer expiry happened.
Does Streamline only captures the functions at which timer expired? If not, is there anything else specific to be taken care of to have the data of all the functions
Getting function information only when the timer has expired is expected. This is because this is the only place you are calling barman_sample_counters_with_program_counter. If you want to get sampling data for more of your application you have two options:
1) Increase the frequency of your timer so that more of your code is sampled
2) If you have any specific functions that you want to sample you can call the barman_sample_counters_with_program_counter manually on these functions meaning you will get a sample everytime the function is hit.
Unless you mean that you are only getting samples inside the sampling function itself. Then this usually points to the value of LR that you are passing into the function being corrupted somehow.
Thank you Stephen