うおーるぼっとをWiiリモコンでコントロールする新しいプログラムです。 以前のものより、Wiiリモコンが早く繋がる様になりました。 It is a program which controls A with the Wii remote. ※ A Bluetooth dongle and a Wii remote control are needed.

Dependencies:   USBHost mbed FATFileSystem mbed-rtos

Committer:
jksoft
Date:
Mon Jun 10 16:01:50 2013 +0000
Revision:
0:fccb789424fc
1.0

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jksoft 0:fccb789424fc 1 /*----------------------------------------------------------------------------
jksoft 0:fccb789424fc 2 * RL-ARM - RTX
jksoft 0:fccb789424fc 3 *----------------------------------------------------------------------------
jksoft 0:fccb789424fc 4 * Name: RTX_CM_LIB.H
jksoft 0:fccb789424fc 5 * Purpose: RTX Kernel System Configuration
jksoft 0:fccb789424fc 6 * Rev.: V4.60
jksoft 0:fccb789424fc 7 *----------------------------------------------------------------------------
jksoft 0:fccb789424fc 8 *
jksoft 0:fccb789424fc 9 * Copyright (c) 1999-2009 KEIL, 2009-2012 ARM Germany GmbH
jksoft 0:fccb789424fc 10 * All rights reserved.
jksoft 0:fccb789424fc 11 * Redistribution and use in source and binary forms, with or without
jksoft 0:fccb789424fc 12 * modification, are permitted provided that the following conditions are met:
jksoft 0:fccb789424fc 13 * - Redistributions of source code must retain the above copyright
jksoft 0:fccb789424fc 14 * notice, this list of conditions and the following disclaimer.
jksoft 0:fccb789424fc 15 * - Redistributions in binary form must reproduce the above copyright
jksoft 0:fccb789424fc 16 * notice, this list of conditions and the following disclaimer in the
jksoft 0:fccb789424fc 17 * documentation and/or other materials provided with the distribution.
jksoft 0:fccb789424fc 18 * - Neither the name of ARM nor the names of its contributors may be used
jksoft 0:fccb789424fc 19 * to endorse or promote products derived from this software without
jksoft 0:fccb789424fc 20 * specific prior written permission.
jksoft 0:fccb789424fc 21 *
jksoft 0:fccb789424fc 22 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
jksoft 0:fccb789424fc 23 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
jksoft 0:fccb789424fc 24 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
jksoft 0:fccb789424fc 25 * ARE DISCLAIMED. IN NO EVENT SHALL COPYRIGHT HOLDERS AND CONTRIBUTORS BE
jksoft 0:fccb789424fc 26 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
jksoft 0:fccb789424fc 27 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
jksoft 0:fccb789424fc 28 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
jksoft 0:fccb789424fc 29 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
jksoft 0:fccb789424fc 30 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
jksoft 0:fccb789424fc 31 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
jksoft 0:fccb789424fc 32 * POSSIBILITY OF SUCH DAMAGE.
jksoft 0:fccb789424fc 33 *---------------------------------------------------------------------------*/
jksoft 0:fccb789424fc 34 #include "error.h"
jksoft 0:fccb789424fc 35
jksoft 0:fccb789424fc 36 #if defined (__CC_ARM)
jksoft 0:fccb789424fc 37 #pragma O3
jksoft 0:fccb789424fc 38 #define __USED __attribute__((used))
jksoft 0:fccb789424fc 39 #elif defined (__GNUC__)
jksoft 0:fccb789424fc 40 #pragma GCC optimize ("O3")
jksoft 0:fccb789424fc 41 #define __USED __attribute__((used))
jksoft 0:fccb789424fc 42 #elif defined (__ICCARM__)
jksoft 0:fccb789424fc 43 #define __USED __root
jksoft 0:fccb789424fc 44 #endif
jksoft 0:fccb789424fc 45
jksoft 0:fccb789424fc 46
jksoft 0:fccb789424fc 47 /*----------------------------------------------------------------------------
jksoft 0:fccb789424fc 48 * Definitions
jksoft 0:fccb789424fc 49 *---------------------------------------------------------------------------*/
jksoft 0:fccb789424fc 50
jksoft 0:fccb789424fc 51 #define _declare_box(pool,size,cnt) uint32_t pool[(((size)+3)/4)*(cnt) + 3]
jksoft 0:fccb789424fc 52 #define _declare_box8(pool,size,cnt) uint64_t pool[(((size)+7)/8)*(cnt) + 2]
jksoft 0:fccb789424fc 53
jksoft 0:fccb789424fc 54 #define OS_TCB_SIZE 48
jksoft 0:fccb789424fc 55 #define OS_TMR_SIZE 8
jksoft 0:fccb789424fc 56
jksoft 0:fccb789424fc 57 #if defined (__CC_ARM) && !defined (__MICROLIB)
jksoft 0:fccb789424fc 58
jksoft 0:fccb789424fc 59 typedef void *OS_ID;
jksoft 0:fccb789424fc 60 typedef uint32_t OS_TID;
jksoft 0:fccb789424fc 61 typedef uint32_t OS_MUT[3];
jksoft 0:fccb789424fc 62 typedef uint32_t OS_RESULT;
jksoft 0:fccb789424fc 63
jksoft 0:fccb789424fc 64 #define runtask_id() rt_tsk_self()
jksoft 0:fccb789424fc 65 #define mutex_init(m) rt_mut_init(m)
jksoft 0:fccb789424fc 66 #define mutex_wait(m) os_mut_wait(m,0xFFFF)
jksoft 0:fccb789424fc 67 #define mutex_rel(m) os_mut_release(m)
jksoft 0:fccb789424fc 68
jksoft 0:fccb789424fc 69 extern OS_TID rt_tsk_self (void);
jksoft 0:fccb789424fc 70 extern void rt_mut_init (OS_ID mutex);
jksoft 0:fccb789424fc 71 extern OS_RESULT rt_mut_release (OS_ID mutex);
jksoft 0:fccb789424fc 72 extern OS_RESULT rt_mut_wait (OS_ID mutex, uint16_t timeout);
jksoft 0:fccb789424fc 73
jksoft 0:fccb789424fc 74 #define os_mut_wait(mutex,timeout) _os_mut_wait((uint32_t)rt_mut_wait,mutex,timeout)
jksoft 0:fccb789424fc 75 #define os_mut_release(mutex) _os_mut_release((uint32_t)rt_mut_release,mutex)
jksoft 0:fccb789424fc 76
jksoft 0:fccb789424fc 77 OS_RESULT _os_mut_release (uint32_t p, OS_ID mutex) __svc_indirect(0);
jksoft 0:fccb789424fc 78 OS_RESULT _os_mut_wait (uint32_t p, OS_ID mutex, uint16_t timeout) __svc_indirect(0);
jksoft 0:fccb789424fc 79
jksoft 0:fccb789424fc 80 #endif
jksoft 0:fccb789424fc 81
jksoft 0:fccb789424fc 82
jksoft 0:fccb789424fc 83 /*----------------------------------------------------------------------------
jksoft 0:fccb789424fc 84 * Global Variables
jksoft 0:fccb789424fc 85 *---------------------------------------------------------------------------*/
jksoft 0:fccb789424fc 86
jksoft 0:fccb789424fc 87 #if (OS_TIMERS != 0)
jksoft 0:fccb789424fc 88 #define OS_TASK_CNT (OS_TASKCNT + 1)
jksoft 0:fccb789424fc 89 #else
jksoft 0:fccb789424fc 90 #define OS_TASK_CNT OS_TASKCNT
jksoft 0:fccb789424fc 91 #endif
jksoft 0:fccb789424fc 92
jksoft 0:fccb789424fc 93 uint16_t const os_maxtaskrun = OS_TASK_CNT;
jksoft 0:fccb789424fc 94 uint32_t const os_rrobin = (OS_ROBIN << 16) | OS_ROBINTOUT;
jksoft 0:fccb789424fc 95 uint32_t const os_trv = OS_TRV;
jksoft 0:fccb789424fc 96 uint8_t const os_flags = OS_RUNPRIV;
jksoft 0:fccb789424fc 97
jksoft 0:fccb789424fc 98 /* Export following defines to uVision debugger. */
jksoft 0:fccb789424fc 99 __USED uint32_t const os_clockrate = OS_TICK;
jksoft 0:fccb789424fc 100 __USED uint32_t const os_timernum = 0;
jksoft 0:fccb789424fc 101
jksoft 0:fccb789424fc 102 /* Stack for the os_idle_demon */
jksoft 0:fccb789424fc 103 unsigned int idle_task_stack[OS_IDLESTKSIZE];
jksoft 0:fccb789424fc 104 unsigned short const idle_task_stack_size = OS_IDLESTKSIZE;
jksoft 0:fccb789424fc 105
jksoft 0:fccb789424fc 106 #ifndef OS_FIFOSZ
jksoft 0:fccb789424fc 107 #define OS_FIFOSZ 16
jksoft 0:fccb789424fc 108 #endif
jksoft 0:fccb789424fc 109
jksoft 0:fccb789424fc 110 /* Fifo Queue buffer for ISR requests.*/
jksoft 0:fccb789424fc 111 uint32_t os_fifo[OS_FIFOSZ*2+1];
jksoft 0:fccb789424fc 112 uint8_t const os_fifo_size = OS_FIFOSZ;
jksoft 0:fccb789424fc 113
jksoft 0:fccb789424fc 114 /* An array of Active task pointers. */
jksoft 0:fccb789424fc 115 void *os_active_TCB[OS_TASK_CNT];
jksoft 0:fccb789424fc 116
jksoft 0:fccb789424fc 117 /* User Timers Resources */
jksoft 0:fccb789424fc 118 #if (OS_TIMERS != 0)
jksoft 0:fccb789424fc 119 extern void osTimerThread (void const *argument);
jksoft 0:fccb789424fc 120 osThreadDef(osTimerThread, (osPriority)(OS_TIMERPRIO-3), 4*OS_TIMERSTKSZ);
jksoft 0:fccb789424fc 121 osThreadId osThreadId_osTimerThread;
jksoft 0:fccb789424fc 122 osMessageQDef(osTimerMessageQ, OS_TIMERCBQS, void *);
jksoft 0:fccb789424fc 123 osMessageQId osMessageQId_osTimerMessageQ;
jksoft 0:fccb789424fc 124 #else
jksoft 0:fccb789424fc 125 osThreadDef_t os_thread_def_osTimerThread = { NULL };
jksoft 0:fccb789424fc 126 osThreadId osThreadId_osTimerThread;
jksoft 0:fccb789424fc 127 osMessageQDef(osTimerMessageQ, 0, void *);
jksoft 0:fccb789424fc 128 osMessageQId osMessageQId_osTimerMessageQ;
jksoft 0:fccb789424fc 129 #endif
jksoft 0:fccb789424fc 130
jksoft 0:fccb789424fc 131
jksoft 0:fccb789424fc 132 /*----------------------------------------------------------------------------
jksoft 0:fccb789424fc 133 * RTX Optimizations (empty functions)
jksoft 0:fccb789424fc 134 *---------------------------------------------------------------------------*/
jksoft 0:fccb789424fc 135
jksoft 0:fccb789424fc 136 #if OS_ROBIN == 0
jksoft 0:fccb789424fc 137 void rt_init_robin (void) {;}
jksoft 0:fccb789424fc 138 void rt_chk_robin (void) {;}
jksoft 0:fccb789424fc 139 #endif
jksoft 0:fccb789424fc 140
jksoft 0:fccb789424fc 141 #if OS_STKCHECK == 0
jksoft 0:fccb789424fc 142 void rt_stk_check (void) {;}
jksoft 0:fccb789424fc 143 #endif
jksoft 0:fccb789424fc 144
jksoft 0:fccb789424fc 145
jksoft 0:fccb789424fc 146 /*----------------------------------------------------------------------------
jksoft 0:fccb789424fc 147 * Standard Library multithreading interface
jksoft 0:fccb789424fc 148 *---------------------------------------------------------------------------*/
jksoft 0:fccb789424fc 149
jksoft 0:fccb789424fc 150 #if defined (__CC_ARM) && !defined (__MICROLIB)
jksoft 0:fccb789424fc 151 static OS_MUT std_libmutex[OS_MUTEXCNT];
jksoft 0:fccb789424fc 152 static uint32_t nr_mutex;
jksoft 0:fccb789424fc 153
jksoft 0:fccb789424fc 154 /*--------------------------- _mutex_initialize -----------------------------*/
jksoft 0:fccb789424fc 155
jksoft 0:fccb789424fc 156 int _mutex_initialize (OS_ID *mutex) {
jksoft 0:fccb789424fc 157 /* Allocate and initialize a system mutex. */
jksoft 0:fccb789424fc 158
jksoft 0:fccb789424fc 159 if (nr_mutex >= OS_MUTEXCNT) {
jksoft 0:fccb789424fc 160 /* If you are here, you need to increase the number OS_MUTEXCNT. */
jksoft 0:fccb789424fc 161 error("Not enough stdlib mutexes\n");
jksoft 0:fccb789424fc 162 }
jksoft 0:fccb789424fc 163 *mutex = &std_libmutex[nr_mutex++];
jksoft 0:fccb789424fc 164 mutex_init (*mutex);
jksoft 0:fccb789424fc 165 return (1);
jksoft 0:fccb789424fc 166 }
jksoft 0:fccb789424fc 167
jksoft 0:fccb789424fc 168
jksoft 0:fccb789424fc 169 /*--------------------------- _mutex_acquire --------------------------------*/
jksoft 0:fccb789424fc 170
jksoft 0:fccb789424fc 171 __attribute__((used)) void _mutex_acquire (OS_ID *mutex) {
jksoft 0:fccb789424fc 172 /* Acquire a system mutex, lock stdlib resources. */
jksoft 0:fccb789424fc 173 if (runtask_id ()) {
jksoft 0:fccb789424fc 174 /* RTX running, acquire a mutex. */
jksoft 0:fccb789424fc 175 mutex_wait (*mutex);
jksoft 0:fccb789424fc 176 }
jksoft 0:fccb789424fc 177 }
jksoft 0:fccb789424fc 178
jksoft 0:fccb789424fc 179
jksoft 0:fccb789424fc 180 /*--------------------------- _mutex_release --------------------------------*/
jksoft 0:fccb789424fc 181
jksoft 0:fccb789424fc 182 __attribute__((used)) void _mutex_release (OS_ID *mutex) {
jksoft 0:fccb789424fc 183 /* Release a system mutex, unlock stdlib resources. */
jksoft 0:fccb789424fc 184 if (runtask_id ()) {
jksoft 0:fccb789424fc 185 /* RTX running, release a mutex. */
jksoft 0:fccb789424fc 186 mutex_rel (*mutex);
jksoft 0:fccb789424fc 187 }
jksoft 0:fccb789424fc 188 }
jksoft 0:fccb789424fc 189
jksoft 0:fccb789424fc 190 #endif
jksoft 0:fccb789424fc 191
jksoft 0:fccb789424fc 192
jksoft 0:fccb789424fc 193 /*----------------------------------------------------------------------------
jksoft 0:fccb789424fc 194 * RTX Startup
jksoft 0:fccb789424fc 195 *---------------------------------------------------------------------------*/
jksoft 0:fccb789424fc 196
jksoft 0:fccb789424fc 197 /* Main Thread definition */
jksoft 0:fccb789424fc 198 extern int main (void);
jksoft 0:fccb789424fc 199 osThreadDef_t os_thread_def_main = {(os_pthread)main, osPriorityNormal, 0, NULL};
jksoft 0:fccb789424fc 200
jksoft 0:fccb789424fc 201 #if defined (__CC_ARM)
jksoft 0:fccb789424fc 202
jksoft 0:fccb789424fc 203 // This define should be probably moved to the CMSIS layer
jksoft 0:fccb789424fc 204 #ifdef TARGET_LPC1768
jksoft 0:fccb789424fc 205 #define INITIAL_SP (0x10008000UL)
jksoft 0:fccb789424fc 206
jksoft 0:fccb789424fc 207 #elif TARGET_LPC11U24
jksoft 0:fccb789424fc 208 #define INITIAL_SP (0x10001000UL)
jksoft 0:fccb789424fc 209
jksoft 0:fccb789424fc 210 #endif
jksoft 0:fccb789424fc 211
jksoft 0:fccb789424fc 212 extern unsigned char Image$$RW_IRAM1$$ZI$$Limit[];
jksoft 0:fccb789424fc 213
jksoft 0:fccb789424fc 214 void set_main_stack(void) {
jksoft 0:fccb789424fc 215 // Leave OS_SCHEDULERSTKSIZE words for the scheduler and interrupts
jksoft 0:fccb789424fc 216 os_thread_def_main.stack_pointer = Image$$RW_IRAM1$$ZI$$Limit;
jksoft 0:fccb789424fc 217 os_thread_def_main.stacksize = (INITIAL_SP - (unsigned int)Image$$RW_IRAM1$$ZI$$Limit) - (OS_SCHEDULERSTKSIZE * 4);
jksoft 0:fccb789424fc 218 }
jksoft 0:fccb789424fc 219
jksoft 0:fccb789424fc 220 #ifdef __MICROLIB
jksoft 0:fccb789424fc 221 void _main_init (void) __attribute__((section(".ARM.Collect$$$$000000FF")));
jksoft 0:fccb789424fc 222 void _main_init (void) {
jksoft 0:fccb789424fc 223 osKernelInitialize();
jksoft 0:fccb789424fc 224 set_main_stack();
jksoft 0:fccb789424fc 225 osThreadCreate(&os_thread_def_main, NULL);
jksoft 0:fccb789424fc 226 osKernelStart();
jksoft 0:fccb789424fc 227 for (;;);
jksoft 0:fccb789424fc 228 }
jksoft 0:fccb789424fc 229 #else
jksoft 0:fccb789424fc 230
jksoft 0:fccb789424fc 231 /* The single memory model is checking for stack collision at run time, verifing
jksoft 0:fccb789424fc 232 that the heap pointer is underneath the stack pointer.
jksoft 0:fccb789424fc 233
jksoft 0:fccb789424fc 234 With the RTOS there is not only one stack above the heap, there are multiple
jksoft 0:fccb789424fc 235 stacks and some of them are underneath the heap pointer.
jksoft 0:fccb789424fc 236 */
jksoft 0:fccb789424fc 237 #pragma import(__use_two_region_memory)
jksoft 0:fccb789424fc 238
jksoft 0:fccb789424fc 239 __asm void __rt_entry (void) {
jksoft 0:fccb789424fc 240
jksoft 0:fccb789424fc 241 IMPORT __user_setup_stackheap
jksoft 0:fccb789424fc 242 IMPORT __rt_lib_init
jksoft 0:fccb789424fc 243 IMPORT os_thread_def_main
jksoft 0:fccb789424fc 244 IMPORT osKernelInitialize
jksoft 0:fccb789424fc 245 IMPORT set_main_stack
jksoft 0:fccb789424fc 246 IMPORT osKernelStart
jksoft 0:fccb789424fc 247 IMPORT osThreadCreate
jksoft 0:fccb789424fc 248 IMPORT exit
jksoft 0:fccb789424fc 249
jksoft 0:fccb789424fc 250 BL __user_setup_stackheap
jksoft 0:fccb789424fc 251 MOV R1,R2
jksoft 0:fccb789424fc 252 BL __rt_lib_init
jksoft 0:fccb789424fc 253 BL osKernelInitialize
jksoft 0:fccb789424fc 254 BL set_main_stack
jksoft 0:fccb789424fc 255 LDR R0,=os_thread_def_main
jksoft 0:fccb789424fc 256 MOVS R1,#0
jksoft 0:fccb789424fc 257 BL osThreadCreate
jksoft 0:fccb789424fc 258 BL osKernelStart
jksoft 0:fccb789424fc 259 BL exit
jksoft 0:fccb789424fc 260
jksoft 0:fccb789424fc 261 ALIGN
jksoft 0:fccb789424fc 262 }
jksoft 0:fccb789424fc 263 #endif
jksoft 0:fccb789424fc 264
jksoft 0:fccb789424fc 265 #elif defined (__GNUC__)
jksoft 0:fccb789424fc 266
jksoft 0:fccb789424fc 267 #ifdef __CS3__
jksoft 0:fccb789424fc 268
jksoft 0:fccb789424fc 269 /* CS3 start_c routine.
jksoft 0:fccb789424fc 270 *
jksoft 0:fccb789424fc 271 * Copyright (c) 2006, 2007 CodeSourcery Inc
jksoft 0:fccb789424fc 272 *
jksoft 0:fccb789424fc 273 * The authors hereby grant permission to use, copy, modify, distribute,
jksoft 0:fccb789424fc 274 * and license this software and its documentation for any purpose, provided
jksoft 0:fccb789424fc 275 * that existing copyright notices are retained in all copies and that this
jksoft 0:fccb789424fc 276 * notice is included verbatim in any distributions. No written agreement,
jksoft 0:fccb789424fc 277 * license, or royalty fee is required for any of the authorized uses.
jksoft 0:fccb789424fc 278 * Modifications to this software may be copyrighted by their authors
jksoft 0:fccb789424fc 279 * and need not follow the licensing terms described here, provided that
jksoft 0:fccb789424fc 280 * the new terms are clearly indicated on the first page of each file where
jksoft 0:fccb789424fc 281 * they apply.
jksoft 0:fccb789424fc 282 */
jksoft 0:fccb789424fc 283
jksoft 0:fccb789424fc 284 #include "cs3.h"
jksoft 0:fccb789424fc 285
jksoft 0:fccb789424fc 286 extern void __libc_init_array (void);
jksoft 0:fccb789424fc 287
jksoft 0:fccb789424fc 288 __attribute ((noreturn)) void __cs3_start_c (void){
jksoft 0:fccb789424fc 289 unsigned regions = __cs3_region_num;
jksoft 0:fccb789424fc 290 const struct __cs3_region *rptr = __cs3_regions;
jksoft 0:fccb789424fc 291
jksoft 0:fccb789424fc 292 /* Initialize memory */
jksoft 0:fccb789424fc 293 for (regions = __cs3_region_num, rptr = __cs3_regions; regions--; rptr++) {
jksoft 0:fccb789424fc 294 long long *src = (long long *)rptr->init;
jksoft 0:fccb789424fc 295 long long *dst = (long long *)rptr->data;
jksoft 0:fccb789424fc 296 unsigned limit = rptr->init_size;
jksoft 0:fccb789424fc 297 unsigned count;
jksoft 0:fccb789424fc 298
jksoft 0:fccb789424fc 299 if (src != dst)
jksoft 0:fccb789424fc 300 for (count = 0; count != limit; count += sizeof (long long))
jksoft 0:fccb789424fc 301 *dst++ = *src++;
jksoft 0:fccb789424fc 302 else
jksoft 0:fccb789424fc 303 dst = (long long *)((char *)dst + limit);
jksoft 0:fccb789424fc 304 limit = rptr->zero_size;
jksoft 0:fccb789424fc 305 for (count = 0; count != limit; count += sizeof (long long))
jksoft 0:fccb789424fc 306 *dst++ = 0;
jksoft 0:fccb789424fc 307 }
jksoft 0:fccb789424fc 308
jksoft 0:fccb789424fc 309 /* Run initializers. */
jksoft 0:fccb789424fc 310 __libc_init_array ();
jksoft 0:fccb789424fc 311
jksoft 0:fccb789424fc 312 osKernelInitialize();
jksoft 0:fccb789424fc 313 osThreadCreate(&os_thread_def_main, NULL);
jksoft 0:fccb789424fc 314 osKernelStart();
jksoft 0:fccb789424fc 315 for (;;);
jksoft 0:fccb789424fc 316 }
jksoft 0:fccb789424fc 317
jksoft 0:fccb789424fc 318 #else
jksoft 0:fccb789424fc 319
jksoft 0:fccb789424fc 320 __attribute__((naked)) void software_init_hook (void) {
jksoft 0:fccb789424fc 321 __asm (
jksoft 0:fccb789424fc 322 ".syntax unified\n"
jksoft 0:fccb789424fc 323 ".thumb\n"
jksoft 0:fccb789424fc 324 "movs r0,#0\n"
jksoft 0:fccb789424fc 325 "movs r1,#0\n"
jksoft 0:fccb789424fc 326 "mov r4,r0\n"
jksoft 0:fccb789424fc 327 "mov r5,r1\n"
jksoft 0:fccb789424fc 328 "ldr r0,= __libc_fini_array\n"
jksoft 0:fccb789424fc 329 "bl atexit\n"
jksoft 0:fccb789424fc 330 "bl __libc_init_array\n"
jksoft 0:fccb789424fc 331 "mov r0,r4\n"
jksoft 0:fccb789424fc 332 "mov r1,r5\n"
jksoft 0:fccb789424fc 333 "bl osKernelInitialize\n"
jksoft 0:fccb789424fc 334 "ldr r0,=os_thread_def_main\n"
jksoft 0:fccb789424fc 335 "movs r1,#0\n"
jksoft 0:fccb789424fc 336 "bl osThreadCreate\n"
jksoft 0:fccb789424fc 337 "bl osKernelStart\n"
jksoft 0:fccb789424fc 338 "bl exit\n"
jksoft 0:fccb789424fc 339 );
jksoft 0:fccb789424fc 340 }
jksoft 0:fccb789424fc 341
jksoft 0:fccb789424fc 342 #endif
jksoft 0:fccb789424fc 343
jksoft 0:fccb789424fc 344 #elif defined (__ICCARM__)
jksoft 0:fccb789424fc 345
jksoft 0:fccb789424fc 346 extern int __low_level_init(void);
jksoft 0:fccb789424fc 347 extern void __iar_data_init3(void);
jksoft 0:fccb789424fc 348 extern void exit(int arg);
jksoft 0:fccb789424fc 349
jksoft 0:fccb789424fc 350 __noreturn __stackless void __cmain(void) {
jksoft 0:fccb789424fc 351 int a;
jksoft 0:fccb789424fc 352
jksoft 0:fccb789424fc 353 if (__low_level_init() != 0) {
jksoft 0:fccb789424fc 354 __iar_data_init3();
jksoft 0:fccb789424fc 355 }
jksoft 0:fccb789424fc 356 osKernelInitialize();
jksoft 0:fccb789424fc 357 osThreadCreate(&os_thread_def_main, NULL);
jksoft 0:fccb789424fc 358 a = osKernelStart();
jksoft 0:fccb789424fc 359 exit(a);
jksoft 0:fccb789424fc 360 }
jksoft 0:fccb789424fc 361
jksoft 0:fccb789424fc 362 #endif
jksoft 0:fccb789424fc 363
jksoft 0:fccb789424fc 364
jksoft 0:fccb789424fc 365 /*----------------------------------------------------------------------------
jksoft 0:fccb789424fc 366 * end of file
jksoft 0:fccb789424fc 367 *---------------------------------------------------------------------------*/
jksoft 0:fccb789424fc 368