III - Advanced Project » History » Version 39

COLIN, Tony, 12/14/2015 11:44 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 38 COLIN, Tony
The example of Reed-Solomon code *example.c* can be used to implement our encoder/decoder in a simple task. 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*
48 1 COLIN, Tony
49 38 COLIN, Tony
* The following message (or information word) is considered at the encoder :
50 38 COLIN, Tony
!CodingWin3.png!
51 38 COLIN, Tony
*Message of 87 characters*
52 1 COLIN, Tony
53 38 COLIN, Tony
* Then, errors due to a fictional channel are added to the codeword :
54 38 COLIN, Tony
!CodingWin2.png!
55 38 COLIN, Tony
*Code of adding errors*
56 38 COLIN, Tony
57 1 COLIN, Tony
---
58 25 COLIN, Tony
59 17 COLIN, Tony
h2. 3. Displaying results.
60 32 COLIN, Tony
61 1 COLIN, Tony
h3. 3.1 In simulation.
62 1 COLIN, Tony
63 38 COLIN, Tony
First of all, we want to simulate the behavior of the dsPIC33 and get an output message window in order to watch our results :
64 38 COLIN, Tony
1. Right-click on your project > Properties > Chose Simulator as Hardware Tool > Apply
65 38 COLIN, Tony
2. Right-click on your project > Properties > Simulator > Chose Uart IO Options > Check Enable Uart1 IO > Apply
66 1 COLIN, Tony
!UART1.png!
67 17 COLIN, Tony
*Checking Output UART Window*
68 32 COLIN, Tony
69 38 COLIN, Tony
After building and debugging the program (through Debug Main Project), results are printed in the UART 1 Output window :
70 1 COLIN, Tony
!CodingWin1_red.png!
71 37 COLIN, Tony
*Displayed result*
72 38 COLIN, Tony
It is now possible to see the codeword, the errors and the correction.
73 20 COLIN, Tony
74 25 COLIN, Tony
h3. 3.2 On board.
75 17 COLIN, Tony
76 39 COLIN, Tony
Henceforth, we can switch from the Simulator to ICD3 and connect the development board. It has been necessary to plug in some LEDs on the board to see the evolution of the program without interface and compare it to the previous results.
77 39 COLIN, Tony
78 39 COLIN, Tony
In this part, we are focusing the last byte of the message :
79 35 COLIN, Tony
80 17 COLIN, Tony
|_.-                    |_.Char       |_.Code ASCII  |_.Hexadecimal |_. Binary       |
81 15 COLIN, Tony
|_.Codeword             |=. 2         |=. 50         |=. 0x32       |   0b00110010   |
82 15 COLIN, Tony
|_.Erroneous Codeword   |=. 3         |=. 51         |=. 0x33       |   0b00110011   |
83 35 COLIN, Tony
84 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.
85 2 COLIN, Tony
86 15 COLIN, Tony
!LEDs_resized.png! !LEDs_error_resized.png! !LEDs_resized.png!
87 7 COLIN, Tony
__________________ *a. Codeword : 0bXX110010* ________________________ *b. Erroneous codeword : 0bXX110011* ____________________ *c. Corrected codeword : 0bXX110010* ______________
88 22 COLIN, Tony
89 25 COLIN, Tony
---
90 1 COLIN, Tony
91 25 COLIN, Tony
h2. 4. Measurement of encoding/decoding time.
92 6 COLIN, Tony
93 36 COLIN, Tony
POSIX requires that CLOCKS_PER_SEC equals 1000000 independent of the actual resolution.
94 36 COLIN, Tony
95 32 COLIN, Tony
!Clock1.png!
96 23 COLIN, Tony
*1000 ticks per milliseconds*
97 1 COLIN, Tony
98 32 COLIN, Tony
!Clock2.png!
99 23 COLIN, Tony
*Time measurement of data encoding*
100 23 COLIN, Tony
101 32 COLIN, Tony
!Clock3.png!
102 23 COLIN, Tony
*Printing clock data*
103 23 COLIN, Tony
104 1 COLIN, Tony
p=. !Time_RS_resized.PNG!
105 23 COLIN, Tony
*Chart of Reed Solomon time measurement*