Rev 6 | Rev 8 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 6 | Rev 7 | ||
---|---|---|---|
Line 23... | Line 23... | ||
23 | a combined work that includes ChibiOS/RT, without being obliged to provide |
23 | a combined work that includes ChibiOS/RT, without being obliged to provide |
24 | the source code for any proprietary components. See the file exception.txt |
24 | the source code for any proprietary components. See the file exception.txt |
25 | for full details of how and when the exception can be applied. |
25 | for full details of how and when the exception can be applied. |
26 | */ |
26 | */ |
27 | 27 | ||
- | 28 | #include <stdio.h> |
|
28 | #include <string.h> |
29 | #include <string.h> |
29 | 30 | ||
30 | #include "ch.h" |
31 | #include "ch.h" |
31 | #include "hal.h" |
32 | #include "hal.h" |
32 | #include "test.h" |
33 | //#include "test.h" |
33 | #include "shell.h" |
34 | #include "shell.h" |
34 | #include "evtimer.h" |
35 | #include "evtimer.h" |
35 | #include "chprintf.h" |
36 | #include "chprintf.h" |
36 | 37 | ||
- | 38 | #include "usbcfg.h" |
|
- | 39 | ||
37 | 40 | ||
38 | #include "ap_math.h" |
41 | #include "ap_math.h" |
39 | #include "hardware.h" |
42 | #include "hardware.h" |
40 | #include "useAdc.h" |
43 | #include "useAdc.h" |
41 | #include "spiInterface.h" |
44 | #include "spiInterface.h" |
Line 47... | Line 50... | ||
47 | 50 | ||
48 | /*===========================================================================*/ |
51 | /*===========================================================================*/ |
49 | /* Command line related. */ |
52 | /* Command line related. */ |
50 | /*===========================================================================*/ |
53 | /*===========================================================================*/ |
51 | 54 | ||
52 | #define SHELL_WA_SIZE THD_WA_SIZE(2048) |
55 | #define SHELL_WA_SIZE THD_WORKING_AREA_SIZE(2048) |
53 | #define TEST_WA_SIZE THD_WA_SIZE(256) |
56 | #define TEST_WA_SIZE THD_WORKING_AREA_SIZE(256) |
54 | 57 | ||
55 | static void cmd_mem(BaseChannel *chp, int argc, char *argv[]) { |
58 | static void cmd_mem(BaseChannel *chp, int argc, char *argv[]) { |
56 | size_t n, size; |
59 | size_t n, size , largest; |
57 | 60 | ||
58 | (void) argv; |
61 | (void) argv; |
59 | if (argc > 0) { |
62 | if (argc > 0) { |
60 | chprintf(chp, "Usage: mem\r\n"); |
63 | chprintf(chp, "Usage: mem\r\n"); |
61 | return; |
64 | return; |
62 | } |
65 | } |
63 | n = chHeapStatus(NULL, &size); |
66 | n = chHeapStatus(NULL, &size, &largest); |
64 | chprintf(chp, "core free memory : %u bytes\r\n", chCoreStatus()); |
67 | chprintf(chp, "core free memory : %u bytes\r\n", chCoreStatus()); |
65 | chprintf(chp, "heap fragments : %u\r\n", n); |
68 | chprintf(chp, "heap fragments : %u \r\n",n); |
- | 69 | chprintf(chp, "largest fragment : %u \r\n",largest); |
|
66 | chprintf(chp, "heap free total : %u bytes\r\n", size); |
70 | chprintf(chp, "heap free total : %u bytes\r\n", size); |
67 | } |
71 | } |
68 | 72 | ||
69 | static void cmd_threads(BaseChannel *chp, int argc, char *argv[]) { |
73 | static void cmd_threads(BaseSequentialStream *chp, int argc, char *argv[]) { |
70 | static const char *states[] = { THD_STATE_NAMES }; |
74 | static const char *states[] = {CH_STATE_NAMES}; |
71 | Thread *tp; |
75 | thread_t *tp; |
72 | 76 | ||
73 | (void) argv; |
77 | (void)argv; |
74 | if (argc > 0) { |
78 | if (argc > 0) { |
75 | chprintf(chp, "Usage: threads\r\n"); |
79 | shellUsage(chp, "threads"); |
76 | return; |
80 | return; |
- | 81 | } |
|
- | 82 | chprintf(chp, "stklimit stack addr refs prio state name\r\n" SHELL_NEWLINE_STR); |
|
- | 83 | tp = chRegFirstThread(); |
|
- | 84 | do { |
|
- | 85 | #if (CH_DBG_ENABLE_STACK_CHECK == TRUE) || (CH_CFG_USE_DYNAMIC == TRUE) |
|
- | 86 | uint32_t stklimit = (uint32_t)tp->wabase; |
|
- | 87 | #else |
|
- | 88 | uint32_t stklimit = 0U; |
|
- | 89 | #endif |
|
- | 90 | chprintf(chp, "%08lx %08lx %08lx %4lu %4lu %9s %12s" SHELL_NEWLINE_STR, |
|
- | 91 | stklimit, (uint32_t)tp->ctx.sp, (uint32_t)tp, |
|
- | 92 | (uint32_t)tp->refs - 1, (uint32_t)tp->prio, states[tp->state], |
|
- | 93 | tp->name == NULL ? "" : tp->name); |
|
- | 94 | tp = chRegNextThread(tp); |
|
- | 95 | } while (tp != NULL); |
|
77 | } |
96 | } |
78 | chprintf(chp, " addr stack prio refs state time\r\n"); |
- | |
79 | tp = chRegFirstThread(); |
- | |
80 | do { |
- | |
81 | chprintf(chp, "%.8lx %.8lx %4lu %4lu %9s %lu\r\n", (uint32_t) tp, |
- | |
82 | (uint32_t) tp->p_ctx.r13, (uint32_t) tp->p_prio, |
- | |
83 | (uint32_t)(tp->p_refs - 1), states[tp->p_state], |
- | |
84 | (uint32_t) tp->p_time); |
- | |
85 | tp = chRegNextThread(tp); |
- | |
86 | } while (tp != NULL); |
- | |
87 | } |
- | |
88 | 97 | ||
89 | static void cmd_test(BaseChannel *chp, int argc, char *argv[]) { |
98 | static void cmd_test(BaseChannel *chp, int argc, char *argv[]) { |
90 | Thread *tp; |
99 | thread_t *tp; |
91 | 100 | ||
92 | (void) argv; |
101 | (void) argv; |
93 | if (argc > 0) { |
102 | if (argc > 0) { |
94 | chprintf(chp, "Usage: test\r\n"); |
103 | chprintf(chp, "Usage: test\r\n"); |
95 | return; |
104 | return; |
96 | } |
105 | } |
97 | tp = chThdCreateFromHeap(NULL, TEST_WA_SIZE, chThdGetPriority(), TestThread, |
106 | //tp = chThdCreateFromHeap(NULL, TEST_WA_SIZE, chThdGetPriority(), TestThread, |
98 | chp); |
107 | // chp); |
99 | if (tp == NULL) { |
108 | if (tp == NULL) { |
100 | chprintf(chp, "out of memory\r\n"); |
109 | chprintf(chp, "out of memory\r\n"); |
101 | return; |
110 | return; |
102 | } |
111 | } |
103 | chThdWait(tp); |
112 | chThdWait(tp); |
104 | } |
113 | } |
105 | 114 | ||
106 | static const ShellCommand commands[] = { { "mem", cmd_mem }, { "threads", |
115 | static const ShellCommand commands[] = { { "mem", cmd_mem }, { "threads", |
107 | cmd_threads }, { "test", cmd_test }, { NULL, NULL } }; |
116 | cmd_threads }, { "test", cmd_test }, { NULL, NULL } }; |
108 | 117 | ||
109 | static const ShellConfig shell_cfg1 = { (BaseChannel *) &SD2, commands }; |
118 | static const ShellConfig shell_cfg1 = { (BaseChannel *) &SDU1, commands }; |
110 | 119 | ||
111 | /* |
120 | /* |
112 | * Red LEDs blinker thread, times are in milliseconds. |
121 | * Red LEDs blinker thread, times are in milliseconds. |
113 | */ |
122 | */ |
114 | uint16_t sampleVal; |
123 | uint16_t sampleVal; |
115 | 124 | ||
116 | static WORKING_AREA(waThread1, 128); |
125 | static THD_WORKING_AREA(waThread1, 128); |
117 | static msg_t Thread1(void *arg) { |
126 | static msg_t Thread1(void *arg) { |
118 | 127 | ||
119 | (void) arg; |
128 | (void) arg; |
120 | chRegSetThreadName("PLL "); |
129 | chRegSetThreadName("PLL "); |
121 | while (TRUE) { |
130 | while (TRUE) { |
Line 125... | Line 134... | ||
125 | } |
134 | } |
126 | return 0; |
135 | return 0; |
127 | } |
136 | } |
128 | 137 | ||
129 | /* |
138 | /* |
- | 139 | * USB Bulk thread, times are in milliseconds. |
|
- | 140 | */ |
|
- | 141 | static THD_WORKING_AREA(waThread2, 128); |
|
- | 142 | static msg_t Thread2(void *arg) { |
|
- | 143 | chThdSleep(TIME_INFINITE); |
|
- | 144 | ||
- | 145 | } |
|
- | 146 | ||
- | 147 | ||
- | 148 | ||
- | 149 | ||
- | 150 | /* |
|
130 | * Application entry point. |
151 | * Application entry point. |
131 | */ |
152 | */ |
132 | int main(void) { |
153 | int main(void) { |
133 | Thread *shelltp = NULL; |
154 | thread_t *shelltp = NULL; |
134 | // struct EventListener el0, el1; |
155 | // struct EventListener el0, el1; |
135 | 156 | ||
136 | /* |
157 | /* |
137 | * System initializations. |
158 | * System initializations. |
138 | * - HAL initialization, this also initializes the configured device drivers |
159 | * - HAL initialization, this also initializes the configured device drivers |
Line 141... | Line 162... | ||
141 | * RTOS is active. |
162 | * RTOS is active. |
142 | */ |
163 | */ |
143 | halInit(); |
164 | halInit(); |
144 | chSysInit(); |
165 | chSysInit(); |
145 | 166 | ||
- | 167 | /* |
|
- | 168 | * Initializes a serial-over-USB CDC driver. |
|
- | 169 | */ |
|
- | 170 | sduObjectInit(&SDU1); |
|
- | 171 | sduStart(&SDU1, &serusbcfg); |
|
- | 172 | ||
- | 173 | /* |
|
- | 174 | * Activates the USB driver and then the USB bus pull-up on D+. |
|
- | 175 | * Note, a delay is inserted in order to not have to disconnect the cable |
|
- | 176 | * after a reset. |
|
- | 177 | */ |
|
- | 178 | usbDisconnectBus(serusbcfg.usbp); |
|
- | 179 | chThdSleepMilliseconds(1500); |
|
- | 180 | usbStart(serusbcfg.usbp, &usbcfg); |
|
- | 181 | usbConnectBus(serusbcfg.usbp); |
|
146 | 182 | ||
- | 183 | // Ignition timing code |
|
147 | initTimer2(); |
184 | initTimer2(); |
148 | 185 | ||
149 | useAdc(); |
186 | useAdc(); |
150 | 187 | ||
151 | /* |
188 | /* |
152 | * Activates the serial driver 2 using the driver default configuration. |
189 | * Activates the serial driver 2 using the driver default configuration. |
153 | */ |
190 | */ |
154 | sdStart(&SD2, NULL); |
191 | sdStart(&SD2, NULL); |
Line 198... | Line 235... | ||
198 | font_sig_digits(12, 0,1,-1, sampleVal); |
235 | font_sig_digits(12, 0,1,-1, sampleVal); |
199 | 236 | ||
200 | 237 | ||
201 | display(); |
238 | display(); |
202 | 239 | ||
203 | chMtxUnlock(); |
240 | chMtxUnlock(&mutexDisplay); |
204 | // |
241 | // |
205 | // invertDisplay(x & 32); |
242 | // invertDisplay(x & 32); |
206 | 243 | ||
207 | chThdSleep(MS2ST(10)); |
244 | chThdSleep(chTimeMS2I(10)); |
208 | 245 | ||
209 | } |
246 | } |
210 | 247 | ||
211 | 248 | ||
- | 249 | // shell thread code . dead at present |
|
212 | /* |
250 | // /* |
213 | * Normal main() thread activity, in this demo it does nothing except |
251 | // * Normal main() thread activity, spawning shells. |
214 | * sleeping in a loop and listen for events. |
- | |
215 | */ |
252 | // */ |
216 | while (TRUE) { |
253 | // while (true) { |
217 | if (!shelltp) |
254 | // if (SDU1.config->usbp->state == USB_ACTIVE) { |
218 | shelltp = shellCreate(&shell_cfg1, SHELL_WA_SIZE, NORMALPRIO); |
255 | // thread_t *shelltp = chThdCreateFromHeap(NULL, SHELL_WA_SIZE, |
219 | else if (chThdTerminated(shelltp)) { |
256 | // "shell", NORMALPRIO + 1, |
220 | chThdRelease(shelltp); /* Recovers memory of the previous shell. */ |
257 | // shellThread, (void *)&shell_cfg1); |
221 | shelltp = NULL; /* Triggers spawning of a new shell. */ |
258 | // chThdWait(shelltp); /* Waiting termination. */ |
222 | } |
259 | // } |
223 | chThdSleep(MS2ST(100)); |
260 | // chThdSleepMilliseconds(1000); |
224 | // chEvtDispatch(evhndl, chEvtWaitOne(ALL_EVENTS)); |
- | |
225 | } |
261 | // } |
226 | return 0; |
262 | |
227 | } |
263 | } |