Hi,
How do I use objdump command on S32 Design studio?
MY TARGET IS s32k144/146.
What do I need to type in the council?
Thanks,
Solved! Go to Solution.
Hi Jiri,
The issue is resolved. It was actually a hardware problem the input that was keeping the device awake was . routed to the wrong pin on the 146 eval board and for reasons that I'm yet to know it was working one way and not the other. The micro was going to sleep basically.
Thanks for keeping up with me on this.
Hi Jiri,
Unfortunately, I'm pressed for time, I won't be able to do that. Actually I don't believe you need a slave SPI device for this . This happens when I try to write to the slave device, so you should be able to reproduce the anomaly . If you use the scope you can see the CLK, CHIP_SELECT, MOSI, MISO , in this case you don't care about MISO since you don't have a slave device.
ONE THING I FORGOT TO MENTION IS THAT TO PREVENT THE BOARD TO GO TO SLEEP, YOU NEED TO CONNECT VDD TO PTA2 ON YOUR EVAL BOARD
Thanks,
Hi
S32DS uses standard GNU objdump. Here is list of options:
For what purpose you need to use objdump? You can add objdump in post-build step, or use it out of S32DS from command line.
Jiri
Hi Jiri,
you wrote:
or use it out of S32DS from command line.
where is S32DS from command line?
is it in the debug council? or do you mean like the windows command line?
Thanks
Actually I know how to use it now.
Do you know which option would be best to use to indicate a memory access violation?
Thanks
Hi,
which kind of memory access violation? If you like to see addresses used in .elf file - you can disassembly your .elf file in project. Just right click on .elf file in binaries folder and choose disassembly selected files.
Also the mapfile - located in the Debug folder of your project - project_name.map file is good starting point to look for out of range memory address.
From standard windows command line you can use:
arm-none-eabi-objdump.exe -d your_elf_file.elf
Don't forget add the [S32DS_INSTALL_PATH]\Cross_Tools\gcc-arm-none-eabi-4_9\bin\ into system variable PATH if you like to use objdump across filesystem.
Jiri
Hi Kral,
I guess I need to use something like gdb core dump to be able to detect a segfault.
I am not sure how to use it on S32k design studio or even if it could be used here.I know I hit a trap however with limited call stack in design studio it is hard to pinpoint it.
Thanks
Hi,
Well - I'm afraid that S32K144 has no such resources to be able generate something like core dump. The best way how to debug your program is just go step by step with breakpoints.
If you use FreeRTOS - it is more complicated, but FreeRTOS has some techniques for heap monitoring and so on.
So - can you be please more specific what you are trying to do?
Jiri
Hi Jiri,
Thanks for your reply.
To be more specific:
I do a SPI DMA transfer using SDK DMA_TRANSFER routine. This function takes SPI instance, pointer to TX buffer and a pointer to RX_buffer and the number of the bytes to be transferred as inputs
I use the SPI complete call back to call this routine to avoid bottle neck since I don't want to wait to trigger the next transfer(NONE BLOCKING).
It works fine as long as I pass the RX_BUFFER pointer where it is declared as a global variable in the file where the transfer_complete call back is defined. if I declare it in some other file and refer to it as external where it is used ,It trips an exception. The issue is that I don't know which exception is triggered.
All the exceptions are defined as a while(1) That's where I end up.
There is no build error and MAP file looks good . the bss section has the right alignment.
If I want to reach here , I would say may be the DMA works on certain areas of the RAM and not all the section defined in the linker file.
I just hope my description is not too confusing to understand.
Thanks,
Hi,
finally - I understand. So, are you able in debug session check if the addresses passed into SDK dma_transfer are valid addresses? You can also check memory content on that particular address in memory view:
But the exception may be caused by bunch of other things - like watchdog, unhandled interrupt and so on. Can you share your project?
Jiri
Hi Jiri,
The Exception is a data bus fault.
the variable in question are defined in i2cee.c, i2cee.h and lspi_master_driver.c and it is called "rx_1_buff[35].
if declared as global in "lspi_master_driver.c" everything works if not (defined in i2cee.c/.h) I hit a bus fault.
I'VE ATTACHED THE PROJECT. THIS IS A HUGE PROJECT.
Hi,
unfortunately I can't reproduce your issue (probably because I don't have valid SPI communication). But the question is - why you define the rx_1_buff in i2cee.c where is not used at all and the buffer is used as extern in lspi_master_driver.c - and this is the only place where is used.
You also don't need to initialize the buffer to 0. It is done by startup.
Well, if buffer defined in lspi_master_driver.c is working for you - why you need define it in different .c file?
Also if the error occurs - the Program Counter should hold address of instruction which caused bus error.
Jiri
Hi,
of course, I don't have to and when I don't it works as I've mentioned that before. the i2cee.c file will be changed to SPIee.c and this strictly is based on the way things are done around this place.
I already pinpointed the instruction address.
I LOOKED AT THE STACK AND PC POINTS TO 0X18055 WHICH THIS BEING A THUMB INSTRUCTION SET, ACTUALLY IT MEANS 0X18054 WHICH IS "MOV R3,R0 " AND the following would be "strh r3 [r7, #30] .
I need to dig deeper into this.
The question is why this is happening . I can get around this ,this time by changing where I define a certain variable .
If we don't find the root cause of this now, next time it could bite us in the rear bottom.
Thanks,
Hi,
agree. For me it is interesting stuff and I like to find out the root case. it will be helpful if you can find scenario which caused the bus error, but without special settings. I can setup two EVB for testing, but I don't know if I can just send dummy data back from slave EVB. If you have time for that, can you prepare such scenario?
Jiri
Hi Jiri,
The issue is resolved. It was actually a hardware problem the input that was keeping the device awake was . routed to the wrong pin on the 146 eval board and for reasons that I'm yet to know it was working one way and not the other. The micro was going to sleep basically.
Thanks for keeping up with me on this.
Hi Jiri,
Unfortunately, I'm pressed for time, I won't be able to do that. Actually I don't believe you need a slave SPI device for this . This happens when I try to write to the slave device, so you should be able to reproduce the anomaly . If you use the scope you can see the CLK, CHIP_SELECT, MOSI, MISO , in this case you don't care about MISO since you don't have a slave device.
ONE THING I FORGOT TO MENTION IS THAT TO PREVENT THE BOARD TO GO TO SLEEP, YOU NEED TO CONNECT VDD TO PTA2 ON YOUR EVAL BOARD
Thanks,