Commit Graph

51 Commits (0712b8adf6bbc7eb796d5dac26f95d79d40745ef)

Author SHA1 Message Date
Sam Grove 34caf43f5a Merge pull request #2238 from OpenNuvoton/nuc472
[NUC472] Add NUMAKER-PFM-NUC472
2016-08-04 10:37:31 -05:00
Martin Kojtal ac34f29f66 Merge pull request #2297 from neilt6/spi-mutex-fix
[HAL] Modified SPI to use shared mutex
2016-07-29 17:30:38 +02:00
Russ Butler 1da259af3b Fix RTC test failures by removing critical sect
Remove the critical section in mbed_rtc_time.c and instead use a
mutex to protect this. This function does not need to be interrupt
safe, just thread safe.

This fixes crashes on the GCC_ARM toolchain on the RTC test due to
trying to lock the GCC environment mutex while in a critical section.
Prior to this patch, this failure was likely to occur on STM and LPC
processor families.
2016-07-28 14:35:51 -05:00
Russ Butler 4047ff9576 Create dedicated file for PlatformMutex
Move the PlatformMutex class into a dedicated file to reduce the
number of unnecessary includes.
2016-07-28 14:21:04 -05:00
neilt6 e80b16628d [HAL] Modified SPI to use shared mutex
Modified the SPI class to use a shared mutex for all instances. This is
consistent with I2C and others.
2016-07-28 08:57:59 -06:00
ccli8 41242e3d55 Support NUMAKER_PFM_NUC472 2016-07-28 10:00:49 +08:00
Sam Grove dc9fb460ee prepend common .c files with mbed_ 2016-07-22 23:36:25 -05:00
Sam Grove 542fcca670 Merge pull request #2137 from sg-/operators
Remove macro for operators. Enable these as default behavior
2016-07-22 19:01:24 -05:00
Russ Butler 348b32c3c6 Create singleton class and update code to use it
Create the wrapper class SingletonPtr.  This provides a safe way to
declare and use singletons.  This class allows both the lazy
initialization of a singleton, and allows the singleton to be
garbage collected by the linker if it is never referenced.

This patch also updates the HAL to use SingletonPtr when declaring
singleton mutexes.
2016-07-15 14:37:43 -05:00
Martin Kojtal 829289bdd9 Merge pull request #2129 from jamike/Fix_for_#2124
Fix issue #2124: IAR no rtos
2016-07-15 10:48:53 +01:00
Christopher Haster 126de5b07a Added config option for stdio baud rate 2016-07-11 18:42:44 -05:00
Sam Grove 254ae0e109 Remove macro for operators. Enable these as default behavior 2016-07-10 13:47:13 -05:00
Christopher Haster 98d55e71d8 Moved core_util_atomic_*_ptr functions out of cortex switch 2016-07-09 11:14:16 -05:00
Christopher Haster 70013d03b6 Fixed casts around calls to atomic u32 functions
- uint32_t -> void *
- void ** -> uint32_t *

For whatever reason `uintptr_t` and `uint32_t` expand to incompatible
types `unsigned int` and `unsigned long int`. This is implicitely casted
when passed by value, but causes a warning in gcc and error in iar when
passed by pointer.

This issue is not present on x86_32 gcc
2016-07-09 11:13:20 -05:00
Michel JAOUEN e29aa6a7fa Fix issue #2124: IAR no rtos
Remove the 2nd call of mbed_sdk_init in __iar_argc_argv
2016-07-08 13:45:52 +02:00
Christopher Haster 2c78dca69c Fixed typo in incr/decr function
Result of last minute change, interestingly only emits a
warning in gcc.
2016-07-07 22:51:31 -05:00
Christopher Haster 9067148618 Standardized style of critical.h
per @0xc0170
2016-07-06 13:06:37 -05:00
Christopher Haster 26726cc170 Added proper usage of standard types for critical pointer functions 2016-07-06 13:06:34 -05:00
Christopher Haster cf6f8e33fb Added cas instrinsics for pointer values
- core_util_atomic_cas
- core_util_atomic_incr
- core_util_atomic_decr
2016-07-06 13:04:36 -05:00
Martin Kojtal 1216d8088d Merge pull request #2092 from akselsm/spi-init-fix
SPI: Properly aquire peripheral in constructor
2016-07-04 10:10:11 +01:00
Aksel Skauge Mellbye b09a87ffb8 SPI: Properly aquire peripheral in constructor
Prevent mismatch between _owner and peripheral configuration. In the previous
implementation, the following code would leave the peripheral in an inconsistent
state:

```
SPI spi1(...);      // _owner is NULL, peripheral config is 1
spi1.transfer(...); // _owner is 1, config is 1
SPI spi2(...);      // _owner is 1, config is 2
spi1.transfer(...)  // 1 thinks it still owns peripheral, doesn't reconfigure
```
2016-07-04 09:52:57 +02:00
Anna Bridge 329f8a10dc Add core_util_ prefix to are_interrupts_enabled() function.
For consistency with other exposed functions from this file, core_util_
prefix should be added.
2016-07-01 15:08:31 +01:00
Anna Bridge 2292794385 Reverse the logic to get_interrupts_disabled() to are_interrupts_enabled()
and update the using functions accordingly.

Usage:
bool interrupts_enabled = are_interrupts_enabled()

Remove superfluos shift in are_interrupts_enabled().
2016-07-01 14:55:53 +01:00
Anna Bridge 9f052bc500 Update function get_interrupts_disabled() to return a bool value rather
than an integer. This removes the need for all users to mask the returned
value with 0x1 to determine interrupt status.
Expose this function externally to allow other users to check interrupt
status in a manner which will work for both cortex-A and cortex-M .
Usage:
bool disabled = get_interrupts_disabled();
2016-07-01 14:53:53 +01:00
Christopher Haster 54609f6d62 Added default value for MBED_CONF_CORE_STDIO_CONVERT_NEWLINES 2016-06-17 03:54:39 -05:00
Christopher Haster 1480c231e9 Added config option for newline conversion 2016-06-15 21:14:26 -05:00
Christopher Haster 2330dcc49a Added newline conversion for stdin
stdin converts the following character sequences:

\n   -> \n
\r\n -> \n
\r   -> \n
\n\r -> \n

For original behaviour, a serial object can be instantiated explicitly
2016-06-15 20:58:30 -05:00
Christopher Haster 69c33625eb Added newline conversion for stdout
stdout converts the following character sequences:

\n   -> \r\n
\r\n -> \r\n
\r   -> \r
\n\r -> \n\r

For original behaviour, a serial object can be instantiated explicitly
2016-06-15 20:58:30 -05:00
Jaeden Amero af572350f0 Don't call __disable_irq for uVisor
This is a hack to get debug builds applications that use uVisor to work.
The assertions in core_util_critical_section fail because interrupts can't
actually be disabled from unprivileged mode.

Without this hack, core_util_critical_section_enter() calls
mbed_assert_internal() when the assertion fails, which calls
core_util_critical_section_enter() again, which calls
mbed_assert_internal() again; this is infinite recursion.

core_util_critical_section_enter needs some fixing.
2016-06-14 14:09:56 +00:00
0xc0170 81a7bdc482 critical - fix __STDC_LIMIT_MACROS for armcc
UINT32_MAX is defined only if __STDC_LIMIT_MACROS is provided prior
including stdint.h
2016-06-13 22:14:13 +01:00
0xc0170 3b2d75fcda error - include interface header file
to get mbed_error_vprinf() declaration
2016-06-13 21:54:44 +01:00
Russ Butler 8c2e352dd8 Fix GCC malloc lock
The malloc lock functions were not declared as extern "C" so they
are not getting linked to the standard library.  Add extern "C" to
fix this.

This bug was introduced in the commit:
d0b7b3b497 -
Fix duplicate symbols for malloc lock and unlock
2016-06-13 15:00:42 +01:00
Russ Butler d0b7b3b497 Fix duplicate symbols for malloc lock and unlock
When the malloc lock and unlock functions are inside a library they
conflict with the standard libraries weak version of these functions.
This is because of the way weak references are handled by the linker.
This patch renames the lock and unlock functions defined inside RTX
so they do not conflict.  A thunk inside retarget.cpp then calls the
RTX functions.  This problem does not occur with retarget.cpp since
it is always build into an object file rather than a library file.
2016-06-12 18:18:41 +01:00
Russ Butler b174d6a314 Add virtual lock for thread safe classes
Add a virtual lock for the classes which are thread safe.  This
allows the use of a mutex to be overridden.
2016-06-11 17:33:12 +01:00
Russ Butler e4f6e1b327 Update assert and error to be interrupt safe
Add printf functions intended for errors which are safe to call from
interrupts.  Update assert and error to use this function.
2016-06-11 17:33:10 +01:00
Russ Butler feb60784e9 Make core mbed API thread safe
Make the mbed C++ API thread safe by adding a combination of
mutexes and critical sections.  Stub out all mutexes when the
RTOS is not present.
2016-06-11 17:33:02 +01:00
Niklas Hauser f81cf5d686 Add default implementation of malloc wrapping
For GCC malloc is always wrapped, but only used for FEATURE_UVISOR.
Otherwise we have to simply forward the wrappers.
2016-06-10 16:56:17 +01:00
Jaeden Amero 5d48984914 Initialize uvisor-lib
uvisor-lib has an init function that must be called before the RTOS kernel
is initialized. Call uvisor_lib_init from software_init_hook to accomplish
this.
2016-06-10 16:56:17 +01:00
Jaeden Amero 43e595aec3 Wrap software_init_hook
Wrap software_init_hook so that it can be used or extended from outside the
RTOS. This is desirable so that code can be added to the software_init_hook
without making the RTOS depend on new features or libraries.
2016-06-10 16:56:17 +01:00
0xc0170 b5c4faf6f6 Critical section - fix for cortex-a
Cortex-A does not contain primask, there's 7th bit in the CPSR register,
that contains this information. Fixes #1851.

Renames primask variables to interrupts_disabled.
2016-06-06 12:17:29 +01:00
Russ Butler f3b1d45963 Add functions for atomic access
Add core util functions for atomic increment, atomic decrement and
compare and set.
2016-06-06 10:55:55 +01:00
Russ Butler bd216c37cb Make the IAR standard library thread safe
Add the locks and flags necessary to make the IAR standard library
thread safe.  These changes consist of:
-Add compiler flag "--guard_calls" to ensure C++ function-static
    variables with dynamic initializers are initialized in a
    thread safe manner
-Add the linker flag "--threaded_lib" so the thread safe version of
    the standard library is used
-Implement mutex functions required for IAR thread safety
-Create a set of stub functions in retarget.c for when the rtos is not present
2016-05-31 14:41:21 -05:00
0xc0170 5e62c37f17 Critical - use mbed assert
uARM complained about assert:
```
Error: L6218E: Undefined symbol __aeabi_assert (referred from critical.o).
Finished: 0 information, 0 warning and 1 error messages.
[ERROR] Error: L6218E: Undefined symbol __aeabi_assert (referred from critical.o).
Finished: 0 information, 0 warning and 1 error messages.
```
2016-05-31 15:07:36 +01:00
Sam Grove b2f2075fc2 correct indentation from tab to space 2016-05-28 19:03:22 +08:00
Sam Grove 284bd081b4 Remove __enable and __disable irq calls from mbed hal common code 2016-05-28 17:19:55 +08:00
Kevin Bracey 4422884c16 Use critical section helper in HAL
Routines using __disable_irq and __enable_irq had the effect of
enabling interrupts if called with interrupts disabled.

Some versions of __disable_irq do not return old status to restore it.

Change to use the critical section helper functions instead.
2016-05-28 00:04:20 -05:00
Anna Bridge 462c917ad0 Add a c based re-entrant critical section API
This includes a generic critical section implementation.  This
implementation also allow a user to start a critical section while
interrupts are already disabled.
2016-05-27 23:27:52 -05:00
Sam Grove 60c862c206 Merge pull request #1795 from 0xc0170/dev_mbedos_additions
Small changes (docs plus assert)
2016-05-28 09:02:04 +08:00
Christopher Haster a7f4262858 Adopt Callback class in hal 2016-05-27 10:28:46 -05:00
0xc0170 985255dbb5 assert - use fprintf (if serial=1) and mbed_die 2016-05-26 15:36:32 +01:00