III - Advanced Project » History » Version 29
COLIN, Tony, 12/14/2015 10:07 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 | 25 | COLIN, Tony | In this part, you will have to modify particular files of the previous 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 | 1 | 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 | 24 | COLIN, Tony | !main.png! |
26 | 1 | COLIN, Tony | |
27 | 1 | COLIN, Tony | --- |
28 | 1 | COLIN, Tony | |
29 | 25 | COLIN, Tony | h2. 2. Integration of a Reed-Solomon encoder/decoder. |
30 | 1 | COLIN, Tony | |
31 | 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. |
32 | 1 | COLIN, Tony | |
33 | 1 | COLIN, Tony | h3. 2.1 Presentation of Reed-Solomon. |
34 | 28 | COLIN, Tony | |
35 | 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 : |
36 | 29 | COLIN, Tony | (1) *rs.c*, (2) *berlekamp.c*, (3) *crcgen.c*, (4) *ecc.h* and (5) *example.c* |
37 | 29 | COLIN, Tony | |
38 | 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). |
39 | 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. |
40 | 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. |
41 | 29 | COLIN, Tony | |
42 | 28 | COLIN, Tony | More information is available on attachment:rs.doc and attachment:config.doc. |
43 | 1 | COLIN, Tony | |
44 | 25 | COLIN, Tony | h3. 2.2 Task Example. |
45 | 29 | COLIN, Tony | |
46 | 29 | COLIN, Tony | The example of Reed-Solomon code *example.c* can be used to implement our encoder/decoder in a simple task. |
47 | 29 | COLIN, Tony | See 1.1 and 1.2 for the definition and integration of *task_example.c* |
48 | 1 | COLIN, Tony | |
49 | 25 | COLIN, Tony | --- |
50 | 1 | COLIN, Tony | |
51 | 25 | COLIN, Tony | h2. 3. Displaying results. |
52 | 1 | COLIN, Tony | |
53 | 25 | COLIN, Tony | h3. 3.1 In simulation. |
54 | 17 | COLIN, Tony | |
55 | 20 | COLIN, Tony | p=. !CodingWin3.png! |
56 | 1 | COLIN, Tony | *Message of 87 characters* |
57 | 17 | COLIN, Tony | |
58 | 20 | COLIN, Tony | p=. !CodingWin2.png! |
59 | 1 | COLIN, Tony | *Code of adding errors* |
60 | 17 | COLIN, Tony | |
61 | 20 | COLIN, Tony | p=. !UART1.png! |
62 | 1 | COLIN, Tony | *Checking Output UART Window* |
63 | 1 | COLIN, Tony | |
64 | 1 | COLIN, Tony | p=. !CodingWin1.png! |
65 | 17 | COLIN, Tony | *Displayed result* |
66 | 20 | COLIN, Tony | |
67 | 25 | COLIN, Tony | h3. 3.2 On board. |
68 | 17 | COLIN, Tony | |
69 | 17 | COLIN, Tony | |_.- |_.Char |_.Code ASCII |_.Hexadecimal |_. Binary | |
70 | 15 | COLIN, Tony | |_.Codeword |=. 2 |=. 50 |=. 0x32 | 0b00110010 | |
71 | 15 | COLIN, Tony | |_.Erroneous Codeword |=. 3 |=. 51 |=. 0x33 | 0b00110011 | |
72 | 2 | COLIN, Tony | |
73 | 15 | COLIN, Tony | !LEDs_resized.png! !LEDs_error_resized.png! !LEDs_resized.png! |
74 | 7 | COLIN, Tony | __________________ *a. Codeword : 0bXX110010* ________________________ *b. Erroneous codeword : 0bXX110011* ____________________ *c. Corrected codeword : 0bXX110010* ______________ |
75 | 22 | COLIN, Tony | |
76 | 25 | COLIN, Tony | --- |
77 | 1 | COLIN, Tony | |
78 | 25 | COLIN, Tony | h2. 4. Measurement of encoding/decoding time. |
79 | 6 | COLIN, Tony | |
80 | 23 | COLIN, Tony | p=. !Clock1.png! |
81 | 23 | COLIN, Tony | *1000 ticks per milliseconds* |
82 | 1 | COLIN, Tony | |
83 | 23 | COLIN, Tony | p=. !Clock2.png! |
84 | 23 | COLIN, Tony | *Time measurement of data encoding* |
85 | 23 | COLIN, Tony | |
86 | 23 | COLIN, Tony | p=. !Clock3.png! |
87 | 23 | COLIN, Tony | *Printing clock data* |
88 | 23 | COLIN, Tony | |
89 | 1 | COLIN, Tony | p=. !Time_RS_resized.PNG! |
90 | 23 | COLIN, Tony | *Chart of Reed Solomon time measurement* |