Embedded C programming Tutorial , Keil C ide , microsoftware.gr
Keil CRC and CAN BUS codes.
1. Shift led left
2.It's time for DAVE! <7/6/13>
3.Capture/Compare unit 6
6.Analog converter
7.Memory manipulation routines
8. Recursion
9.Understanding interrupt priorities using CAPCOM2 module
10. POINTERS TO FUNCTION <4/7/13>,<4/28/13>
11.Memory models, memory types
12. The heap , part 1
13. The heap , part 2
14. The heap , part 3
15. Structure example
16. Nested structures, Array of structures.
17. Passing array of structures to function using pointers.<1/5/13>
18. Self Referential Structures
20. Linked list example
21. Circular linked list
22. Union example
23. Enumeration example
24. Watchdog timer example
25. Void pointer example <7/4/13>
26. The sieve of Eratosthenes
27. The stack
28. Union and bitfields as flags example. <6/23/13>
29. Look up table example. <8/11/13>
30. Seven segment display multiplexing -four digits with dot- example
31. LCD character display example - JHD162A
32. Hash table introduction example <8/27/14>
33. Array of Linked Lists example
34. Array of Linked lists-more functions included.
35. Hash table construction,searching and printing.
36. Fininte state machines- a first approach.
37. Finite state machines- two events example.
38. SPI port and an AT25128 serial eeprom hardware.
40. Definite Integral Calculator for Scientists, Engineers...
41 .Hamming distance of a CRC polynomial
42. Linux play starting.
43. Galois GF(2^4) Finite Field
44. Construct your own time triggered real time operating system.
27. The stack

This article presents the stack memory area.

The memory stack may be thought as a bulding down in memory.The stack pointer sp register is adjusted to point to the next stack location for every word pushed onto the stack.The current location in the sp represents the location of the last word pushed onto the stack.

Please have a look at:   Stack and stack pointer  ,  Data structures

In Keil ide we observe two main stacks. The system stack which contain return address for CALL instructions and also stores registers used for local register variables. The stack pointer for this area is sp .The user stack: it includes the main part that is 0x200= 512 bytes long which stores arguments to a  called function and two small parts each one  0x20 bytes long  which store  the returning address from an interrupt.The stack pointer for the user stack is R0 rigister.

A technique to see what part of stack is used from an application is to fill the stack with a known word (at this example with 0xdcba) and to find the area that is overwritten. An easy way to fill the system stack is to use _push_() and _pop_ () functions. We can do overflows and underflows also.

You can find stack's areas in the projct  .map file.

The C code                                 The result

Exercise: Change the values of k and l integers of the C code and play doing stack overflows and underflows.Watch the stack pointer sp , doing step by step execution.

 Stack needs a lot of ink to write, coming back...