III - Advanced Project » History » Version 36

COLIN, Tony, 12/14/2015 10:59 AM

1 25 COLIN, Tony
h1. III - Advanced Project.
2 1 COLIN, Tony
3 1 COLIN, Tony
{{>toc}}
4 1 COLIN, Tony
5 25 COLIN, Tony
h2. 1. Adapting project to elementary task.
6 1 COLIN, Tony
7 26 COLIN, Tony
See [[Wiki#"3. Creation of a simple MPLAB X IDE project"|Tutorial page]] for project bases.
8 34 COLIN, Tony
In this part, you will have to modify particular files of the previous folder Test/.
9 1 COLIN, Tony
10 26 COLIN, Tony
h3. 1.1 Integration of C Source files into task(s).
11 25 COLIN, Tony
12 27 COLIN, Tony
* *task_name.c* stating _void task_name (void) { ... }_.
13 26 COLIN, Tony
Here you can either call the C main function in the task_name function or adapting your main file into one or several tasks (for simultaneity during process).
14 25 COLIN, Tony
15 27 COLIN, Tony
* *task_name.h* stating _extern void task_name (void);_ and other intern functions.
16 25 COLIN, Tony
17 26 COLIN, Tony
h3. 1.2 Definition of your task(s) to be called.
18 25 COLIN, Tony
19 28 COLIN, Tony
* *tasks.h* defining OSTCBP of all predifined tasks i.e. the way of specifying a pointer to a particular Salvo _Task Control Block_. More information is available on Salvo User Manual.
20 25 COLIN, Tony
21 27 COLIN, Tony
* *task_cmd.c* which is a tool provided by Test/ that allows to resume/stop your task(s).
22 32 COLIN, Tony
!task_cmd.png!
23 25 COLIN, Tony
24 28 COLIN, Tony
* *main.c* i.e. the basic implementation to call your task(s). All statements are essential for Salvo and CSK to work.
25 32 COLIN, Tony
!main.png!
26 1 COLIN, Tony
27 30 COLIN, Tony
28 1 COLIN, Tony
---
29 1 COLIN, Tony
30 25 COLIN, Tony
h2. 2. Integration of a Reed-Solomon encoder/decoder.
31 1 COLIN, Tony
32 25 COLIN, Tony
A highly convenient implementation of a Reed-Solomon code is available on "RS Code Website":http://rscode.sourceforge.net/ and will be integrated in the following.
33 1 COLIN, Tony
34 1 COLIN, Tony
h3. 2.1 Presentation of Reed-Solomon.
35 28 COLIN, Tony
36 29 COLIN, Tony
This is an implementation of a Reed-Solomon code with 8 bit bytes, and a configurable number of parity bytes. The maximum sequence length (codeword) that can be generated is 255 bytes, including parity bytes. It provides the following C/H - files :
37 29 COLIN, Tony
(1) *rs.c*, (2) *berlekamp.c*, (3) *crcgen.c*, (4) *ecc.h* and (5) *example.c*
38 29 COLIN, Tony
39 29 COLIN, Tony
The *rs.c* file contains an algorithm to generate the encoder polynomial for any number of bytes of parity, configurable as the _NPAR_ constant in the file *ecc.h*. For this RS code, G(x) = (x-a^1)(x-a^2)(x-a^3)(x-a^4)...(x-a^NPAR) where 'a' is a primitive element of the Galois Field GF(256).
40 29 COLIN, Tony
*rs.c* contains also a decoder that generates four syndrome bytes, which will be all zero if the message has no errors. 
41 29 COLIN, Tony
The more general error-location algorithm is the Berlekamp-Massey algorithm (implemented in *berlekamp.c*), which will locate up to four errors, by iteratively solving for the error-locator polynomial.
42 29 COLIN, Tony
43 28 COLIN, Tony
More information is available on attachment:rs.doc and attachment:config.doc.
44 1 COLIN, Tony
45 25 COLIN, Tony
h3. 2.2 Task Example.
46 29 COLIN, Tony
47 29 COLIN, Tony
The example of Reed-Solomon code *example.c* can be used to implement our encoder/decoder in a simple task.
48 33 COLIN, Tony
See [[III - Advanced Project#"1.1 Integration of C Source files into task(s)."|1.1]] and [[III - Advanced Project#"1.2 Definition of your task(s) to be called."|1.2]] for the definition and integration of *task_example.c*
49 30 COLIN, Tony
50 1 COLIN, Tony
51 25 COLIN, Tony
---
52 1 COLIN, Tony
53 25 COLIN, Tony
h2. 3. Displaying results.
54 1 COLIN, Tony
55 25 COLIN, Tony
h3. 3.1 In simulation.
56 17 COLIN, Tony
57 32 COLIN, Tony
!CodingWin3.png!
58 1 COLIN, Tony
*Message of 87 characters*
59 17 COLIN, Tony
60 32 COLIN, Tony
!CodingWin2.png!
61 1 COLIN, Tony
*Code of adding errors*
62 17 COLIN, Tony
63 32 COLIN, Tony
!UART1.png!
64 1 COLIN, Tony
*Checking Output UART Window*
65 1 COLIN, Tony
66 32 COLIN, Tony
!CodingWin1.png!
67 17 COLIN, Tony
*Displayed result*
68 20 COLIN, Tony
69 25 COLIN, Tony
h3. 3.2 On board.
70 17 COLIN, Tony
71 35 COLIN, Tony
In this part, we are focusing the last byte of the message.
72 35 COLIN, Tony
73 17 COLIN, Tony
|_.-                    |_.Char       |_.Code ASCII  |_.Hexadecimal |_. Binary       |
74 15 COLIN, Tony
|_.Codeword             |=. 2         |=. 50         |=. 0x32       |   0b00110010   |
75 15 COLIN, Tony
|_.Erroneous Codeword   |=. 3         |=. 51         |=. 0x33       |   0b00110011   |
76 35 COLIN, Tony
77 35 COLIN, Tony
A first function _void display_6bits(unsigned char* string, int index)_ has been written in order to light up the six LEDs according to the most right six bits of the binary representation of the character indicated by the _index_ in _string_. A second function _void reset_leds(void)_ switchs off the LEDs.
78 2 COLIN, Tony
79 15 COLIN, Tony
!LEDs_resized.png! !LEDs_error_resized.png! !LEDs_resized.png!
80 7 COLIN, Tony
__________________ *a. Codeword : 0bXX110010* ________________________ *b. Erroneous codeword : 0bXX110011* ____________________ *c. Corrected codeword : 0bXX110010* ______________
81 22 COLIN, Tony
82 25 COLIN, Tony
---
83 1 COLIN, Tony
84 25 COLIN, Tony
h2. 4. Measurement of encoding/decoding time.
85 6 COLIN, Tony
86 36 COLIN, Tony
POSIX requires that CLOCKS_PER_SEC equals 1000000 independent of the actual resolution.
87 36 COLIN, Tony
88 32 COLIN, Tony
!Clock1.png!
89 23 COLIN, Tony
*1000 ticks per milliseconds*
90 1 COLIN, Tony
91 32 COLIN, Tony
!Clock2.png!
92 23 COLIN, Tony
*Time measurement of data encoding*
93 23 COLIN, Tony
94 32 COLIN, Tony
!Clock3.png!
95 23 COLIN, Tony
*Printing clock data*
96 23 COLIN, Tony
97 1 COLIN, Tony
p=. !Time_RS_resized.PNG!
98 23 COLIN, Tony
*Chart of Reed Solomon time measurement*