Versie 0.2 Het versturen via de NRF werkt nog niet helemaal omdat er per 4 bytes verstuurd moet worden. Wordt gefixt d.m.v. dynamic stuff!
Dependencies: BufferedSerial
Dependents: rtos_basic rtos_basic
Fork of mbed-rtos by
Revision 107:bdd541595fc5, committed 2016-03-15
- Comitter:
- mbed_official
- Date:
- Tue Mar 15 09:00:39 2016 +0000
- Parent:
- 106:dfc27975e193
- Child:
- 108:e3b1083b1577
- Commit message:
- Synchronized with git revision 3afb55095212c88fc1c17177348bc1e16259c1ca
Full URL: https://github.com/mbedmicro/mbed/commit/3afb55095212c88fc1c17177348bc1e16259c1ca/
[STM32F4] Add DEVICE_RTC_LSI=0 to all targets
Changed in this revision
--- a/rtos/Thread.cpp Wed Mar 02 11:30:15 2016 +0000 +++ b/rtos/Thread.cpp Tue Mar 15 09:00:39 2016 +0000 @@ -22,6 +22,7 @@ #include "Thread.h" #include "mbed_error.h" +#include "rtos_idle.h" namespace rtos { @@ -132,6 +133,10 @@ return osThreadGetId(); } +void Thread::attach_idle_hook(void (*fptr)(void)) { + rtos_attach_idle_hook(fptr); +} + Thread::~Thread() { terminate(); if (_dynamic_stack) {
--- a/rtos/Thread.h Wed Mar 02 11:30:15 2016 +0000 +++ b/rtos/Thread.h Tue Mar 15 09:00:39 2016 +0000 @@ -131,6 +131,11 @@ @return thread ID for reference by other functions or NULL in case of error. */ static osThreadId gettid(); + + /** Attach a function to be called by the RTOS idle task + @param fptr pointer to the function to be called + */ + static void attach_idle_hook(void (*fptr)(void)); virtual ~Thread();
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/rtos/rtos_idle.c Tue Mar 15 09:00:39 2016 +0000 @@ -0,0 +1,51 @@ +/* mbed Microcontroller Library + * Copyright (c) 2006-2012 ARM Limited + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +#include "rtos_idle.h" + +static void default_idle_hook(void) +{ + /* Sleep: ideally, we should put the chip to sleep. + Unfortunately, this usually requires disconnecting the interface chip (debugger). + This can be done, but it would break the local file system. + */ + // sleep(); +} +static void (*idle_hook_fptr)(void) = &default_idle_hook; + +void rtos_attach_idle_hook(void (*fptr)(void)) +{ + //Attach the specified idle hook, or the default idle hook in case of a NULL pointer + if (fptr != NULL) { + idle_hook_fptr = fptr; + } else { + idle_hook_fptr = default_idle_hook; + } +} + +void rtos_idle_loop(void) +{ + //Continuously call the idle hook function pointer + while (1) { + idle_hook_fptr(); + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/rtos/rtos_idle.h Tue Mar 15 09:00:39 2016 +0000 @@ -0,0 +1,37 @@ +/* mbed Microcontroller Library + * Copyright (c) 2006-2012 ARM Limited + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +#ifndef RTOS_IDLE_H +#define RTOS_IDLE_H + +#include <stddef.h> + +#ifdef __cplusplus +extern "C" { +#endif + +void rtos_attach_idle_hook(void (*fptr)(void)); + +#ifdef __cplusplus +} +#endif + +#endif
--- a/rtx/TARGET_ARM7/RTX_Conf_CM.c Wed Mar 02 11:30:15 2016 +0000 +++ b/rtx/TARGET_ARM7/RTX_Conf_CM.c Tue Mar 15 09:00:39 2016 +0000 @@ -204,17 +204,12 @@ /*---------------------------------------------------------------------------- * OS Idle daemon *---------------------------------------------------------------------------*/ -void os_idle_demon (void) { - /* The idle demon is a system thread, running when no other thread is */ - /* ready to run. */ +extern void rtos_idle_loop(void); - /* Sleep: ideally, we should put the chip to sleep. - Unfortunately, this usually requires disconnecting the interface chip (debugger). - This can be done, but it would break the local file system. - */ - for (;;) { - // sleep(); - } +void os_idle_demon (void) { + /* The idle demon is a system thread, running when no other thread is */ + /* ready to run. */ + rtos_idle_loop(); } /*----------------------------------------------------------------------------
--- a/rtx/TARGET_CORTEX_A/RTX_Conf_CA.c Wed Mar 02 11:30:15 2016 +0000 +++ b/rtx/TARGET_CORTEX_A/RTX_Conf_CA.c Tue Mar 15 09:00:39 2016 +0000 @@ -223,14 +223,12 @@ *---------------------------------------------------------------------------*/ /*--------------------------- os_idle_demon ---------------------------------*/ +extern void rtos_idle_loop(void); void os_idle_demon (void) { /* The idle demon is a system thread, running when no other thread is */ /* ready to run. */ - - for (;;) { - /* HERE: include optional user code to be executed when no thread runs.*/ - } + rtos_idle_loop(); } #if (OS_SYSTICK == 0) // Functions for alternative timer as RTX kernel timer
--- a/rtx/TARGET_CORTEX_M/RTX_Conf_CM.c Wed Mar 02 11:30:15 2016 +0000 +++ b/rtx/TARGET_CORTEX_M/RTX_Conf_CM.c Tue Mar 15 09:00:39 2016 +0000 @@ -305,17 +305,12 @@ /*---------------------------------------------------------------------------- * OS Idle daemon *---------------------------------------------------------------------------*/ -void os_idle_demon (void) { - /* The idle demon is a system thread, running when no other thread is */ - /* ready to run. */ +extern void rtos_idle_loop(void); - /* Sleep: ideally, we should put the chip to sleep. - Unfortunately, this usually requires disconnecting the interface chip (debugger). - This can be done, but it would break the local file system. - */ - for (;;) { - // sleep(); - } +void os_idle_demon (void) { + /* The idle demon is a system thread, running when no other thread is */ + /* ready to run. */ + rtos_idle_loop(); } /*----------------------------------------------------------------------------