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.
12. The heap , part 1

This article explains by example how heap works.

Memory allocation refers to allocation of pieces of memory pools belonging to a large memory space called heap. Some space of heap may be unused so we can locate the allocated pools there.

There are cases where we don't know the exact size of an array from the begining, we don't know if the array is small or big.
For example, as in this article, we will make multiplication tables of integers. Sending an integer to the microcontroller via ASC0 (with the help of Hyperterminal, no keyboard is present) like 4 we take:

 The multiplication table of 4 is:

   1 2 3 4

1| 1 2 3 4

2| 2 4 6 8

3| 3 6 9 12

4| 4 8 12 16

It is obvious that the size of this array depends on the value of the integer that we send to the microcontroller and we can't know it from the begining. Program during execution must save enough memory space for the array, "on the fly".

The solution is malloc() function. Malloc returns a pointer to a free heap memory space allocating the memory pool whoose size  determined previously initializing it usung the init_mempool function, so we can save data to a free memory space at heap.. We use it here as :

ptr_int = malloc(max * max * sizeof(unsigned int));

max is an integer, say 9, that we sent via ASC0 and sizeof(unsigned int) is the size of the unsigned integer number of the compiler, 2 bytes. So the total number of bytes that will be allocated is 9*9*2=162.

We asked  an  unsigned integer  memory pool space of 200 places (400 bytes) to be allocated, so the maximum number that the program accepts is 14 (14*14*2=382 bytes in allocation). Sending 15 we are over the memory pool size determined with init_mempool and malloc() fails.

Don't forget to free, after use, the allocated memory pool with free().

The heap example c code.

Heap functions

The result