Display zeigt merkwürdige Zeichen

Dependencies:   mbed PinDetect TextLCD

Fork of FWFSU_Start_28102013 by KX-ONE

Committer:
manuelfederanko
Date:
Tue Aug 02 09:54:13 2016 +0000
Revision:
17:ce5a80e8fc8e
Parent:
16:78da467a0609
Child:
19:a06d764e4f64
Fixed a bug, when pressing stop right after a reset caused the program to break.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
manuelfederanko 16:78da467a0609 1 #include "main.h"
joca89 0:097b334e1077 2
manuelfederanko 13:a45461fbb77f 3 #define PING_TIMEOUT 50000 //5 seconds
joca89 0:097b334e1077 4
manuelfederanko 17:ce5a80e8fc8e 5 struct linked_list *times;
manuelfederanko 16:78da467a0609 6
manuelfederanko 13:a45461fbb77f 7 /**
manuelfederanko 13:a45461fbb77f 8 * Controls the button presses:
manuelfederanko 13:a45461fbb77f 9 * 1st press: The starttime gets set and the counter begins to run
manuelfederanko 13:a45461fbb77f 10 * 2nd press: The first snapshot gets taken and displayed
manuelfederanko 13:a45461fbb77f 11 * 3rd press: The second snapshot gets taken and displayed
manuelfederanko 13:a45461fbb77f 12 * 4th press: The stoptime gets taken, the overall time is displayed
manuelfederanko 13:a45461fbb77f 13 * The Stop can also occure when received from the Stopp button over the rf modul.
manuelfederanko 13:a45461fbb77f 14 * This does not require the snapshots to be taken.
manuelfederanko 13:a45461fbb77f 15 */
manuelfederanko 13:a45461fbb77f 16 void btn_control() {
manuelfederanko 13:a45461fbb77f 17 char nbuff[9];
manuelfederanko 13:a45461fbb77f 18 btn_cnt++;
manuelfederanko 13:a45461fbb77f 19 switch (btn_cnt) {
manuelfederanko 13:a45461fbb77f 20 case 0:
manuelfederanko 13:a45461fbb77f 21
manuelfederanko 13:a45461fbb77f 22 break;
manuelfederanko 13:a45461fbb77f 23 case 1:
manuelfederanko 13:a45461fbb77f 24 start_tm = systime;
manuelfederanko 13:a45461fbb77f 25 comm_flags |= FLAG_START;
manuelfederanko 13:a45461fbb77f 26 int_to_str(start_tm, nbuff);
manuelfederanko 13:a45461fbb77f 27 ser.sendCode(MSG_CODE_TMS, nbuff);
manuelfederanko 13:a45461fbb77f 28 break;
manuelfederanko 13:a45461fbb77f 29 case 2:
manuelfederanko 13:a45461fbb77f 30 snapshot0 = systime;
manuelfederanko 13:a45461fbb77f 31 comm_flags |= FLAG_SNAP_0;
manuelfederanko 13:a45461fbb77f 32 int_to_str(snapshot0, nbuff);
manuelfederanko 13:a45461fbb77f 33 ser.sendCode(MSG_CODE_TML0, nbuff);
manuelfederanko 13:a45461fbb77f 34 break;
manuelfederanko 13:a45461fbb77f 35 case 3:
manuelfederanko 13:a45461fbb77f 36 snapshot1 = systime;
manuelfederanko 13:a45461fbb77f 37 comm_flags |= FLAG_SNAP_1;
manuelfederanko 13:a45461fbb77f 38 int_to_str(snapshot1, nbuff);
manuelfederanko 13:a45461fbb77f 39 ser.sendCode(MSG_CODE_TML1, nbuff);
manuelfederanko 13:a45461fbb77f 40 break;
manuelfederanko 13:a45461fbb77f 41 case 4:
manuelfederanko 13:a45461fbb77f 42 end_tm = systime;
manuelfederanko 13:a45461fbb77f 43 comm_flags |= FLAG_STOP;
manuelfederanko 13:a45461fbb77f 44 int_to_str(end_tm, nbuff);
manuelfederanko 13:a45461fbb77f 45 ser.sendCode(MSG_CODE_TMP, nbuff);
manuelfederanko 13:a45461fbb77f 46 break;
manuelfederanko 13:a45461fbb77f 47 case 5:
manuelfederanko 13:a45461fbb77f 48 btn_cnt--; //since we increment first and then check, it is perfectly ok to decrement to 4
manuelfederanko 13:a45461fbb77f 49 break;
manuelfederanko 13:a45461fbb77f 50 }
manuelfederanko 13:a45461fbb77f 51 ser.flush();
joca89 0:097b334e1077 52 }
joca89 0:097b334e1077 53
manuelfederanko 13:a45461fbb77f 54 /**
manuelfederanko 13:a45461fbb77f 55 * Ping the other device. The Stop-Button must already fully be booted in order for this to
manuelfederanko 13:a45461fbb77f 56 * work, since only then does it start to check for ping requests.
manuelfederanko 13:a45461fbb77f 57 * For this to work the rf module must first be configured, obviously.
manuelfederanko 13:a45461fbb77f 58 */
manuelfederanko 13:a45461fbb77f 59 void ping() {
manuelfederanko 13:a45461fbb77f 60 time_100us start;
manuelfederanko 13:a45461fbb77f 61 tcode code;
manuelfederanko 13:a45461fbb77f 62 char p_resp[10];
manuelfederanko 13:a45461fbb77f 63 char rbuff[MSG_BUFFSIZE];
manuelfederanko 13:a45461fbb77f 64
manuelfederanko 13:a45461fbb77f 65 //notify usr
manuelfederanko 13:a45461fbb77f 66 cprintf("pinging...");
manuelfederanko 13:a45461fbb77f 67 display();
manuelfederanko 13:a45461fbb77f 68
manuelfederanko 13:a45461fbb77f 69 //send ping and wait for resp
manuelfederanko 13:a45461fbb77f 70 start = systime;
manuelfederanko 13:a45461fbb77f 71 ser.sendCode(MSG_CODE_PING, "g");
manuelfederanko 13:a45461fbb77f 72 ser.flush();
manuelfederanko 13:a45461fbb77f 73 while(!ser.codeAvailable() && systime - start < RATE_SHOW_INFO);
manuelfederanko 13:a45461fbb77f 74
manuelfederanko 13:a45461fbb77f 75 //handle
manuelfederanko 13:a45461fbb77f 76 if (ser.codeAvailable()) {
manuelfederanko 13:a45461fbb77f 77 pin = systime - start;
manuelfederanko 13:a45461fbb77f 78 pin = (int) (pin * PING_ERR_COMP); // should be to 10ms accurate
manuelfederanko 13:a45461fbb77f 79 ser.skipToCode();
manuelfederanko 13:a45461fbb77f 80 ser.readCode(&code, rbuff);
manuelfederanko 13:a45461fbb77f 81
manuelfederanko 13:a45461fbb77f 82 if (code != MSG_CODE_PING || rbuff[0] != 'r') {
manuelfederanko 13:a45461fbb77f 83 pin = 0;
manuelfederanko 13:a45461fbb77f 84 cprintf("internal error");
manuelfederanko 13:a45461fbb77f 85 } else {
manuelfederanko 13:a45461fbb77f 86 p_resp[0] = 'p';
manuelfederanko 13:a45461fbb77f 87 int_to_str(pin, &p_resp[1]);
manuelfederanko 13:a45461fbb77f 88 ser.sendCode(MSG_CODE_PING, p_resp);
manuelfederanko 13:a45461fbb77f 89 ser.flush();
manuelfederanko 13:a45461fbb77f 90 cprintf("ping: %de2us", pin);
fox46 11:3d21939eb9bd 91 }
manuelfederanko 13:a45461fbb77f 92 } else {
manuelfederanko 13:a45461fbb77f 93 cprintf("couldn't reach\ndevice");
manuelfederanko 13:a45461fbb77f 94 display();
manuelfederanko 13:a45461fbb77f 95 wait(WAIT_INFO_TM);
manuelfederanko 13:a45461fbb77f 96 cprintf("please turn on\nstop first");
manuelfederanko 13:a45461fbb77f 97 display();
manuelfederanko 13:a45461fbb77f 98 wait(WAIT_INFO_TM);
manuelfederanko 13:a45461fbb77f 99 shutdown_seq();
fox46 11:3d21939eb9bd 100 }
manuelfederanko 13:a45461fbb77f 101
manuelfederanko 13:a45461fbb77f 102 display();
manuelfederanko 13:a45461fbb77f 103 wait(WAIT_INFO_TM);
fox46 4:165fc296f7f5 104 }
fox46 7:016281ea7be6 105
manuelfederanko 13:a45461fbb77f 106 /**
manuelfederanko 15:16d4e268cb84 107 * Synchronize with the slave
manuelfederanko 15:16d4e268cb84 108 */
manuelfederanko 15:16d4e268cb84 109 void resync( void ) {
manuelfederanko 15:16d4e268cb84 110 ser.sendCode(MSG_CODE_TOTAL_RESET, NULL);
manuelfederanko 15:16d4e268cb84 111 ser.flush();
manuelfederanko 15:16d4e268cb84 112 btn_cnt = 0;
manuelfederanko 15:16d4e268cb84 113 comm_flags = 0;
manuelfederanko 15:16d4e268cb84 114 buzzer_state = 0;
manuelfederanko 15:16d4e268cb84 115 button_state = 0;
manuelfederanko 17:ce5a80e8fc8e 116 D = MIN_ROUND_CNT;
manuelfederanko 17:ce5a80e8fc8e 117
manuelfederanko 17:ce5a80e8fc8e 118 if (times != NULL) {
manuelfederanko 17:ce5a80e8fc8e 119 deleteList(times);
manuelfederanko 17:ce5a80e8fc8e 120 times = initNode();
manuelfederanko 17:ce5a80e8fc8e 121 }
manuelfederanko 17:ce5a80e8fc8e 122 }
manuelfederanko 17:ce5a80e8fc8e 123
manuelfederanko 17:ce5a80e8fc8e 124 void reinit_list( void ) {
manuelfederanko 17:ce5a80e8fc8e 125 struct run_time *rt = (struct run_time *)malloc(sizeof(struct run_time));
manuelfederanko 17:ce5a80e8fc8e 126 times = getLast(times);
manuelfederanko 17:ce5a80e8fc8e 127 rt->start = start_tm;
manuelfederanko 17:ce5a80e8fc8e 128 rt->snap0 = snapshot0;
manuelfederanko 17:ce5a80e8fc8e 129 rt->snap1 = snapshot1;
manuelfederanko 17:ce5a80e8fc8e 130 rt->end = end_tm;
manuelfederanko 17:ce5a80e8fc8e 131 times->data = (void *) rt;
manuelfederanko 17:ce5a80e8fc8e 132 appendNode(times, initNode());
manuelfederanko 15:16d4e268cb84 133 }
manuelfederanko 15:16d4e268cb84 134
manuelfederanko 15:16d4e268cb84 135 /**
manuelfederanko 13:a45461fbb77f 136 * Receive routine for serial data.
manuelfederanko 13:a45461fbb77f 137 * Must be attatched to the MsgSerial object.
manuelfederanko 13:a45461fbb77f 138 */
manuelfederanko 13:a45461fbb77f 139 void hdl_rec( void ) {
manuelfederanko 13:a45461fbb77f 140 tcode rec_code;
manuelfederanko 13:a45461fbb77f 141 char rec_buff[MSG_BUFFSIZE];
manuelfederanko 13:a45461fbb77f 142
manuelfederanko 13:a45461fbb77f 143 if (ser.codeAvailable()) {
manuelfederanko 13:a45461fbb77f 144 ser.skipToCode();
manuelfederanko 13:a45461fbb77f 145 ser.readCode(&rec_code, rec_buff);
fox46 12:3f53322a5270 146
manuelfederanko 13:a45461fbb77f 147 switch(rec_code) {
manuelfederanko 13:a45461fbb77f 148 case MSG_CODE_KILL:
manuelfederanko 17:ce5a80e8fc8e 149 deleteList(times);
manuelfederanko 13:a45461fbb77f 150 shutdown_seq(); //the other device will already be shut down when we send the kill signal again, thus it doesn't matter if we do.
manuelfederanko 13:a45461fbb77f 151 break;
manuelfederanko 13:a45461fbb77f 152 case MSG_CODE_PING:
manuelfederanko 13:a45461fbb77f 153 break;
manuelfederanko 13:a45461fbb77f 154 case MSG_CODE_RESET:
manuelfederanko 17:ce5a80e8fc8e 155 reinit_list();
manuelfederanko 13:a45461fbb77f 156 reset();
manuelfederanko 13:a45461fbb77f 157 break;
manuelfederanko 13:a45461fbb77f 158 case MSG_CODE_START:
manuelfederanko 13:a45461fbb77f 159 // NOTHING
manuelfederanko 13:a45461fbb77f 160 break;
manuelfederanko 13:a45461fbb77f 161 case MSG_CODE_STOP:
manuelfederanko 13:a45461fbb77f 162 //pin is the time for a two way signal, if it just needs to travel from 1 device to the other, one must half it for the correct result
manuelfederanko 14:90b2af48767a 163 //end_tm = systime - pin;
manuelfederanko 17:ce5a80e8fc8e 164 if (comm_flags & FLAG_START) { //resetting and pressing stop right afterwards breaks the code, one would need to reset again to start the time.
manuelfederanko 17:ce5a80e8fc8e 165 end_tm = systime;
manuelfederanko 17:ce5a80e8fc8e 166 comm_flags |= FLAG_STOP;
manuelfederanko 17:ce5a80e8fc8e 167 int_to_str(end_tm, rec_buff);
manuelfederanko 17:ce5a80e8fc8e 168 ser.sendCode(MSG_CODE_TMP, rec_buff);
manuelfederanko 17:ce5a80e8fc8e 169 ser.flush();
manuelfederanko 17:ce5a80e8fc8e 170 btn_cnt = 5; //otherwise we could press stop again and the end_tm value would be replaced by systime once again
manuelfederanko 17:ce5a80e8fc8e 171 }
manuelfederanko 13:a45461fbb77f 172 break;
manuelfederanko 13:a45461fbb77f 173 case MSG_CODE_TOTAL_RESET:
manuelfederanko 13:a45461fbb77f 174 // NOTHING
manuelfederanko 13:a45461fbb77f 175 break;
manuelfederanko 15:16d4e268cb84 176 case MSG_CODE_REQ_RES:
manuelfederanko 15:16d4e268cb84 177 resync();
manuelfederanko 15:16d4e268cb84 178 break;
manuelfederanko 13:a45461fbb77f 179 default:
manuelfederanko 13:a45461fbb77f 180 rec_code = 0;
manuelfederanko 13:a45461fbb77f 181 rec_buff[0] = 0;
manuelfederanko 13:a45461fbb77f 182 break;
fox46 11:3d21939eb9bd 183 }
fox46 11:3d21939eb9bd 184 }
fox46 12:3f53322a5270 185 }
joca89 0:097b334e1077 186
manuelfederanko 13:a45461fbb77f 187 void bzr_pressed( void ) {
manuelfederanko 13:a45461fbb77f 188 btn_control();
manuelfederanko 13:a45461fbb77f 189 }
fox46 6:79bc3888c88c 190
manuelfederanko 13:a45461fbb77f 191 void bzr_held_pressed( void ) {
manuelfederanko 17:ce5a80e8fc8e 192 reinit_list();
manuelfederanko 13:a45461fbb77f 193 reset();
manuelfederanko 13:a45461fbb77f 194 ser.sendCode(MSG_CODE_RESET, NULL);
manuelfederanko 13:a45461fbb77f 195 ser.flush();
manuelfederanko 13:a45461fbb77f 196 }
manuelfederanko 13:a45461fbb77f 197
manuelfederanko 13:a45461fbb77f 198 void btn_pressed( void ) {
manuelfederanko 13:a45461fbb77f 199 resync();
manuelfederanko 13:a45461fbb77f 200 }
manuelfederanko 13:a45461fbb77f 201
manuelfederanko 13:a45461fbb77f 202 void btn_held_released( void ) {
manuelfederanko 17:ce5a80e8fc8e 203 deleteList(times);
manuelfederanko 13:a45461fbb77f 204 shutdown_seq();
manuelfederanko 13:a45461fbb77f 205 }
manuelfederanko 13:a45461fbb77f 206
manuelfederanko 13:a45461fbb77f 207 int main() {
manuelfederanko 13:a45461fbb77f 208 //| Element 0 | Element 1 | Element 2 | Element 3 |
manuelfederanko 13:a45461fbb77f 209 //|-----------|-----------|-----------|-----------|
manuelfederanko 13:a45461fbb77f 210 //| Akkucheck | LED blink | Disp-Rate | Btn. Rate |
manuelfederanko 13:a45461fbb77f 211 time_100us prev[5];
fox46 12:3f53322a5270 212
manuelfederanko 13:a45461fbb77f 213 //init
manuelfederanko 13:a45461fbb77f 214 init_io();
manuelfederanko 13:a45461fbb77f 215 init_values();
manuelfederanko 17:ce5a80e8fc8e 216 times = NULL;
manuelfederanko 17:ce5a80e8fc8e 217 tick.attach_us(&handle_systime, 100); //every 100 us
manuelfederanko 17:ce5a80e8fc8e 218 pb1.attach_asserted(&bzr_pressed);
manuelfederanko 17:ce5a80e8fc8e 219 pb1.attach_asserted_held(&bzr_held_pressed);
manuelfederanko 17:ce5a80e8fc8e 220 pb1.setSamplesTillHeld(2000); //2000 samples ---> 1ms ---> 2 seconds
manuelfederanko 17:ce5a80e8fc8e 221 pb1.setSampleFrequency(1000); //1ms
manuelfederanko 17:ce5a80e8fc8e 222
manuelfederanko 17:ce5a80e8fc8e 223 pb2.attach_asserted(&btn_pressed);
manuelfederanko 17:ce5a80e8fc8e 224 pb2.attach_deasserted_held(&btn_held_released);
manuelfederanko 17:ce5a80e8fc8e 225 pb2.setSamplesTillHeld(200);
manuelfederanko 17:ce5a80e8fc8e 226 pb2.setSampleFrequency();
manuelfederanko 17:ce5a80e8fc8e 227
manuelfederanko 17:ce5a80e8fc8e 228 //info
manuelfederanko 17:ce5a80e8fc8e 229 cprintf(RUNMODE_SERVER);
manuelfederanko 17:ce5a80e8fc8e 230 display();
manuelfederanko 17:ce5a80e8fc8e 231 wait(WAIT_INFO_TM);
manuelfederanko 17:ce5a80e8fc8e 232
manuelfederanko 17:ce5a80e8fc8e 233 //config
manuelfederanko 17:ce5a80e8fc8e 234 config_buttons();
manuelfederanko 17:ce5a80e8fc8e 235 config_rf_mod();
manuelfederanko 17:ce5a80e8fc8e 236
manuelfederanko 17:ce5a80e8fc8e 237 //start
manuelfederanko 17:ce5a80e8fc8e 238 lowbatt();
manuelfederanko 17:ce5a80e8fc8e 239 ser.registerRecFc(&hdl_rec);
manuelfederanko 17:ce5a80e8fc8e 240 resync();
manuelfederanko 17:ce5a80e8fc8e 241
manuelfederanko 17:ce5a80e8fc8e 242 prev[0] = prev[1] = prev[2] = prev[3] = prev[4] = systime;
manuelfederanko 17:ce5a80e8fc8e 243
manuelfederanko 17:ce5a80e8fc8e 244 times = initNode();
manuelfederanko 17:ce5a80e8fc8e 245
manuelfederanko 17:ce5a80e8fc8e 246 while(1) {
manuelfederanko 17:ce5a80e8fc8e 247 if (systime - prev[2] >= RATE_DISPLAY) {
manuelfederanko 17:ce5a80e8fc8e 248 prev[2] = systime;
manuelfederanko 17:ce5a80e8fc8e 249 render_time();
manuelfederanko 17:ce5a80e8fc8e 250 display();
manuelfederanko 17:ce5a80e8fc8e 251 }
manuelfederanko 17:ce5a80e8fc8e 252 if (systime - prev[1] >= ((akku_state >= AKKU_1)? RATE_LED_NOK : RATE_LED_OK)) {
manuelfederanko 17:ce5a80e8fc8e 253 prev[1] = systime;
manuelfederanko 17:ce5a80e8fc8e 254 stoppled.write(!stoppled.read());
manuelfederanko 17:ce5a80e8fc8e 255 }
manuelfederanko 17:ce5a80e8fc8e 256 if (comm_flags & FLAG_INFO_LOCK && systime - info_tm >= RATE_SHOW_INFO) {
manuelfederanko 17:ce5a80e8fc8e 257 //if the flag is set it means, that we wanna show something and the time has been set --> if the difference bigger than the rate, then clear the flag
manuelfederanko 17:ce5a80e8fc8e 258 //the flag gets checked in the render_time function, to prevent that from overwriting the info text
manuelfederanko 17:ce5a80e8fc8e 259 comm_flags &= ~FLAG_INFO_LOCK;
manuelfederanko 17:ce5a80e8fc8e 260 }
manuelfederanko 17:ce5a80e8fc8e 261 if (systime - prev[0] >= RATE_CHECK_AKKU) {
manuelfederanko 17:ce5a80e8fc8e 262 prev[0] = systime;
manuelfederanko 17:ce5a80e8fc8e 263 akkucheck();
manuelfederanko 17:ce5a80e8fc8e 264
manuelfederanko 17:ce5a80e8fc8e 265 if (akku_state == AKKU_CRITICAL) {
manuelfederanko 17:ce5a80e8fc8e 266 shutdown_seq();
manuelfederanko 17:ce5a80e8fc8e 267 }
manuelfederanko 17:ce5a80e8fc8e 268 }
manuelfederanko 17:ce5a80e8fc8e 269 }
manuelfederanko 17:ce5a80e8fc8e 270 }
manuelfederanko 17:ce5a80e8fc8e 271
manuelfederanko 17:ce5a80e8fc8e 272 /*
manuelfederanko 17:ce5a80e8fc8e 273 int main() {
manuelfederanko 17:ce5a80e8fc8e 274 //init
manuelfederanko 17:ce5a80e8fc8e 275 init_io();
manuelfederanko 17:ce5a80e8fc8e 276 init_values();
manuelfederanko 13:a45461fbb77f 277 tick.attach_us(&handle_systime, 100); //every 100 us
manuelfederanko 13:a45461fbb77f 278 pb1.attach_asserted(&bzr_pressed);
manuelfederanko 13:a45461fbb77f 279 pb1.attach_asserted_held(&bzr_held_pressed);
manuelfederanko 14:90b2af48767a 280 pb1.setSamplesTillHeld(2000); //2000 samples ---> 1ms ---> 2 seconds
manuelfederanko 14:90b2af48767a 281 pb1.setSampleFrequency(1000); //1ms
manuelfederanko 13:a45461fbb77f 282
manuelfederanko 13:a45461fbb77f 283 pb2.attach_asserted(&btn_pressed);
manuelfederanko 13:a45461fbb77f 284 pb2.attach_deasserted_held(&btn_held_released);
manuelfederanko 13:a45461fbb77f 285 pb2.setSamplesTillHeld(200);
manuelfederanko 13:a45461fbb77f 286 pb2.setSampleFrequency();
manuelfederanko 13:a45461fbb77f 287
manuelfederanko 13:a45461fbb77f 288 //info
manuelfederanko 13:a45461fbb77f 289 cprintf(RUNMODE_SERVER);
manuelfederanko 13:a45461fbb77f 290 display();
manuelfederanko 13:a45461fbb77f 291 wait(WAIT_INFO_TM);
manuelfederanko 13:a45461fbb77f 292
manuelfederanko 13:a45461fbb77f 293 //config
manuelfederanko 13:a45461fbb77f 294 config_buttons();
manuelfederanko 13:a45461fbb77f 295 config_rf_mod();
manuelfederanko 13:a45461fbb77f 296
manuelfederanko 13:a45461fbb77f 297 //start
manuelfederanko 13:a45461fbb77f 298 lowbatt();
manuelfederanko 15:16d4e268cb84 299 //ping();
manuelfederanko 13:a45461fbb77f 300 ser.registerRecFc(&hdl_rec);
manuelfederanko 17:ce5a80e8fc8e 301
manuelfederanko 17:ce5a80e8fc8e 302 struct linked_list *base = initNode();
manuelfederanko 17:ce5a80e8fc8e 303 appendNode(base, initNode());
manuelfederanko 17:ce5a80e8fc8e 304 appendNode(base, initNode());
manuelfederanko 13:a45461fbb77f 305
manuelfederanko 17:ce5a80e8fc8e 306 base->data = (void *) "abc";
manuelfederanko 17:ce5a80e8fc8e 307 base->next->data = (void *) "def";
manuelfederanko 17:ce5a80e8fc8e 308 base->next->next->data = (void *) "ghi";
manuelfederanko 17:ce5a80e8fc8e 309
manuelfederanko 17:ce5a80e8fc8e 310 struct linked_list *nd = initNode();
manuelfederanko 17:ce5a80e8fc8e 311
manuelfederanko 17:ce5a80e8fc8e 312 nd->data = (void *)"123";
manuelfederanko 17:ce5a80e8fc8e 313 insertNode(base->next, nd);
manuelfederanko 13:a45461fbb77f 314
manuelfederanko 17:ce5a80e8fc8e 315 nd = base->next;
manuelfederanko 17:ce5a80e8fc8e 316 removeNode(nd);
manuelfederanko 17:ce5a80e8fc8e 317 nd = base;
manuelfederanko 17:ce5a80e8fc8e 318 while (1) {
manuelfederanko 17:ce5a80e8fc8e 319 if (nd->data != NULL)
manuelfederanko 17:ce5a80e8fc8e 320 cprintf("%s", (char *) nd->data);
manuelfederanko 17:ce5a80e8fc8e 321 else
manuelfederanko 17:ce5a80e8fc8e 322 cprintf("");
fox46 10:27b3acc95b8f 323
manuelfederanko 17:ce5a80e8fc8e 324 display();
manuelfederanko 17:ce5a80e8fc8e 325 wait(2);
manuelfederanko 17:ce5a80e8fc8e 326
manuelfederanko 17:ce5a80e8fc8e 327 nd = nd->next;
manuelfederanko 17:ce5a80e8fc8e 328 if (nd == NULL)
manuelfederanko 17:ce5a80e8fc8e 329 nd = base;
fox46 8:9eccc5d25e8f 330 }
manuelfederanko 17:ce5a80e8fc8e 331 }
manuelfederanko 17:ce5a80e8fc8e 332 */