This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

Keil Bug

Hello
Look at this code if i replace 1024 in array with more than 2048 compiler work fine but micro hang !!
program work fine with 1024 or less.
i use at91sam7x256 this have 64KB Ram.
if i replace char with int then more than 256 have the same problem.

#include <at91sam7x256.h>

int main (void){

char buf[1024]="Hello World";

*AT91C_PMC_PCER = (1<<AT91C_ID_PIOB);
*AT91C_PIOB_PER = (1 << 0) | (1 << 1);
*AT91C_PIOB_OER = (1 << 0) | (1 << 1);
*AT91C_PIOB_SODR = (1 << 1);
*AT91C_PIOB_CODR = (1 << 0);

return 0;

}

Parents
  • You can consume almost all your memory as stack. But for embedded, you normall try to keep down the stack needs.

    The stack is for varibles you only need a limited time. Local variables that can be thrown away when a function ends. Variables that you need for the full lifetime of the application, you would make global, i.e. place outside of your functions.

    What happens when the program ends? Simple - your program should not end. You should create an infinite loop inside main(). The only time you would want a program to end, is if you want to force a reboot (often done by requesting a watchdog reset), or if the device is running on batteries, in which case you often design your equipment so that the microcontroller can request the battery to be disconnected (which would require the user to press a button to reconnect the battery again)

Reply
  • You can consume almost all your memory as stack. But for embedded, you normall try to keep down the stack needs.

    The stack is for varibles you only need a limited time. Local variables that can be thrown away when a function ends. Variables that you need for the full lifetime of the application, you would make global, i.e. place outside of your functions.

    What happens when the program ends? Simple - your program should not end. You should create an infinite loop inside main(). The only time you would want a program to end, is if you want to force a reboot (often done by requesting a watchdog reset), or if the device is running on batteries, in which case you often design your equipment so that the microcontroller can request the battery to be disconnected (which would require the user to press a button to reconnect the battery again)

Children
No data