Loading...
 

SW4STM32 and SW4Linux fully supports the STM32MP1 asymmetric multicore Cortex/A7+M4 MPUs

   With System Workbench for Linux, Embedded Linux on the STM32MP1 family of MPUs from ST was never as simple to build and maintain, even for newcomers in the Linux world. And, if you install System Workbench for Linux in System Workbench for STM32 you can seamlessly develop and debug asymmetric applications running partly on Linux, partly on the Cortex-M4.
You can get more information from the ac6-tools website and download (registration required) various documents highlighting:

System Workbench for STM32


Simple debugger problem...


Hi,

I’m preparing a student class, and I’m facing a debugger behavior that I don’t understand.

I’m running a very simple code on the NucleoF072 :

int main(void)
{
uint8_t i;

i=0;

while(1)
{
i++;
}
}

The variable “i” is located at adress 0x20003ff3 (see example #1). When I step into the assembly code, at line 1b8 the “strb” instruction should store the content of r2 into the memory at 0x20003ff3 (actually, the adress defined by r3+#0). But nothing shows up in the memory view... It keeps reporting zeroes.

Althrough, I suspect that memory has been correctly written because if I reset r2 before line 1b2, the “ldrb” instruction correctly restore r2 at the current value of “i”.

Then, if I declare “i” as a global variable (i.e. before main()), the variable “i” is located at adress 0x20000444 and everything behaves as expected (see example #2).

Is there someone here that understand why is that ? The compiler optimization is O0, but as long as instruction is in the assembly code, I guess that it has nothing to do with optimization stuff...

Thanks,

L.

France

Hi,

There is a small problem in the memory view, where the debugger tries to read past the end of the existing memory (which is the case as your stack is at the end of the chip internal SRAM), thus getting an access error and not updating the memory view. We are currently working on a solution, that will be available in a coming update.

In the meantime you could, instead of using the memory view, you could create a watch to check that the variable is correctly updated, possibly accessing the variable by *(int*)0x20003ff3

Hops this helps,

Bernard


Thanks Bernard.

Yes, I do use the expression view to have watches and it works fine. But as I said, this is purely for educationnal purpose. I’d like the student to make a clear link between variables and memory.

I’ll wait for an update, no problem. I’ve been using Coocox for a while, but I’m willing to switch to SW4STM32 since I now you’re working closely with ST teams.

Thanks !!