Commit Graph

320 Commits (11b6a4eaf9f1b047e83c693f8d1e036f16a037d4)

Author SHA1 Message Date
Cruz Monrreal 671c2d7e90
Merge pull request #5346 from scartmell-arm/feature-hal-spec-critical-section
Add Critical Section HAL API specification
2018-01-16 12:49:38 -06:00
Martin Kojtal 280d491ff2
Merge pull request #5456 from TeroJaasko/fix_cpp_alloc_wrappers
platform: make C++ allocation wrappers log the correct caller address
2018-01-15 15:29:54 +00:00
Maciej Bocianski a3c9c124f7 platform: Add ScopedLock 2018-01-15 09:34:05 +01:00
Cruz Monrreal c0c501c70f
Merge pull request #5768 from deepikabhavnani/storage_stats
Added statvfs API to get storage statistics
2018-01-11 10:25:41 -06:00
Steven Cartmell 061795c489 Move in_critical_section implementation into the HAL
- Add function to HAL hal_in_critical_section()
- Wrap assert in FEATURE_UVISOR macro
2018-01-09 10:41:29 +00:00
Deepika d5cf4a6a6a fsblkcnt_t is available in GCC, but adding it for all compilers 2018-01-08 10:42:41 -06:00
Tero Jääskö b81be1e34c platform: Fix C++ allocation wrappers for GCC compilation
Fix the caller address logging on the GCC compilation too.
Previously the code logged the caller address as C++ wrapper,
not the actual caller of the C++ operator new or delete.
2018-01-08 16:09:39 +02:00
Tero Jääskö 1cf5c45615 platform: make C++ allocation wrappers log the correct caller address
The C++ "operator new" and "operator delete" (and their array
variants) were logging the the caller address wrong. In practice
if one used "operator new", the logged caller address pointed
to mbed_retarget.cpp, not to the client. Fix this by exposing
the alloc wrappers to the the retarget.

Note: this fixes only the ARMCC variants, as the GCC ones have
different different API and implementation.
2018-01-08 16:09:32 +02:00
Steven Cartmell e14bee5209 Fix potential race condition in critical section HAL API
Call underlying HAL implementation to enter critical section/disable interrupts
before incrementing the global critical section counter.

Modify HAL implementations to track first entrances to the critical section and
only update the saved state on first enter.
2018-01-05 14:55:58 +00:00
Steven Cartmell a07c07fa63 Update HAL API header information 2018-01-05 14:55:57 +00:00
Steven Cartmell 84391f0b64 Remove invalid assert and move uVisor warning to correct function 2018-01-05 14:55:57 +00:00
Steven Cartmell 07a394ee8b Add Critical Section HAL API specification
- Define header functions for Critical Section HAL API
  - hal_critical_section_enter()
  - hal_critical_section_exit()

- Add weak default implementation for HAL API. The default implementation
  matches the previous behaviour stored in mbed_critical:
  - The first call to enter a critical section stores the state of interrupts
    before disabling and each successive call re-disables interrupts.
  - The last call (non-nested) will restore the IRQ state that was set on the
    enter to the critical section. Nested calls are ignored.

- Add function 'core_util_in_critical_section' to User facing API to determine
  if the program is currently in a critical section, instead of depending on
  'core_util_interrupts_enabled'.
2018-01-05 14:53:51 +00:00
Deepika 7a90be0ce1 Added statvfs API to get storage statistics
The API is as per posix standard, but does not provide stats for file/directory.
Stats buffer (block size, total block count, free block count) is filled for
entire mounted filesystem.
2017-12-29 16:42:31 -06:00
Anna Bridge eda0acc5da
Merge pull request #5621 from maciejbocianski/critical_section_imp2
CriticalSectionLock class improvement
2017-12-29 14:37:00 +00:00
Anna Bridge 1b53aabc5c
Merge pull request #5733 from deepikabhavnani/non_rtos_serial_fix
Access to serial device is allowed when DEVICE_SERIAL is defined
2017-12-29 14:28:15 +00:00
Maciej Bocianski aa22ef1e1e platform: fix mem_trace trace_level guard 2017-12-23 09:20:35 +01:00
Maciej Bocianski ad67904daa platform: CriticalSectionLock class improvement 2017-12-23 09:18:37 +01:00
Seppo Takalo 6c3f307257 Fix PR5578 2017-12-21 12:22:11 +02:00
Deepika 5bc33b94f8 Access to serial device is allowed when DEVICE_SERIAL is defined 2017-12-20 09:59:06 -06:00
Martin Kojtal b89cf3ff75
Merge pull request #5578 from mprse/CircularBuffer_tests
CircularBuffer class modification and test
2017-12-20 14:51:44 +00:00
Martin Kojtal bea41d1ebb
Merge pull request #5635 from c1728p9/fix_lazy_init
Protect local static object construction in ARMCC
2017-12-12 17:41:21 +00:00
Martin Kojtal be52ba2156
Merge pull request #5363 from mprse/extended_rtc
Add support and tests for extended RTC
2017-12-12 17:36:44 +00:00
Russ Butler c63a627868 Protect local static object construction in ARMCC
Implement the functions __cxa_guard_acquire, __cxa_guard_release
and __cxa_guard_abort for ARMCC so local static object construction is
thread safe.
2017-12-01 11:14:58 -06:00
Przemyslaw Stekiel dc5a66dc5c Add support for extended RTC.
Provide support to use whole 32-bit range (unsigned int) to hold time since UNIX epoch.
The suppoerted time range is now from the 1st of January 1970 at 00:00:00 to the 7th of February 2106 at 06:28:15.
Add support for two types of RTC devices:
- RTCs which handles all leap years in the mentioned year range correctly. Leap year is determined by checking if the year counter value is divisible by 400, 100, and 4.
- RTCs which handles leap years correctly up to 2100. The RTC does a simple bit comparison to see if the two lowest order bits of the year counter are zero. In this case 2100 year will be considered incorrectly as a leap year, so the last valid point in time will be 28.02.2100 23:59:59 and next day will be 29.02.2100 (invalid). So after 28.02.2100 the day counter will be off by a day.
2017-12-01 17:07:34 +01:00
Martin Kojtal b076565ac0
Merge pull request #5596 from kjbracey-arm/strong_cas
Make LDREX/STREX CAS functions strong
2017-11-30 18:04:14 +00:00
Przemyslaw Stekiel c962913ed9 Add assertion to make CounterType consistent with BufferSize.
CounterType is used to define type of _head and _tail counters. This may cause the following problems:
- counters are used as array indexes so only unsigned types should be used for counters,
- CounterType must be consistent with BufferSize and BufferSize is of uint32_t type (i.e. Circular Buffer with the following parameters: BufferSize = 1000, CounterType = unsigned char will not work properly).
2017-11-29 11:26:23 +01:00
Kevin Bracey 59508d46a6 Explicitly note that CAS is strong in docs
Add a note to each CAS making explicit that the functions are strong.

Minor wording change to expectedCurrentValue - use of "still updated"
about the failure case suggested that it might be written to on success.
For some uses it's critically important that expectedCurrentValue only
be written on failure, so change wording to "instead updated".
2017-11-28 14:02:28 +02:00
Kevin Bracey cfa6d07a3b Make LDREX/STREX CAS functions strong
The LDREX/STREX implementations of the compare-and-swap functions were
weak (they could spuriously fail when the value was expected), whereas
the critial section implementation was strong, and the documentation has
no suggestion that there might be spurious failures.

Rationalise by adding a retry loop for STREX failure, so that it only
returns false when the value is not expected.

Fixes https://github.com/ARMmbed/mbed-os/issues/5556
2017-11-28 11:56:50 +02:00
Jimmy Brisson 70e7b40468
Merge pull request #5583 from kjbracey-arm/delete_null
Remove pointless null check in operator delete
2017-11-27 10:37:40 -06:00
Jimmy Brisson b9c3003419
Merge pull request #5466 from kjbracey-arm/write_all
Make POSIX-like writes write everything when blocking
2017-11-27 10:36:28 -06:00
Kevin Bracey ff6bc08c53 Remove pointless null check in operator delete
free() checks for NULL, no need to add another check.
2017-11-24 10:40:15 +02:00
deepikabhavnani e78998e117 Definition for stat was missing in header file 2017-11-22 17:41:24 -06:00
Jimmy Brisson 4b57c5818e
Merge pull request #5528 from c1728p9/simplify_retarget
Use retarget defines where possible
2017-11-22 10:18:36 -06:00
Jimmy Brisson b6e50f5ed9
Merge pull request #5525 from deepikabhavnani/errno_fix
Fixed: errno update failure with IAR8.x
2017-11-22 10:17:56 -06:00
Kevin Bracey 9678c8052e Make UARTSerial send all data when blocking
Previously, write() was somewhat soft - it only ever made one attempt to
wait for buffer space, so it would take as much data as would fit in the
buffer in one call.

This is not the intent of a POSIX filehandle write. It should try to
send everything if blocking, and only send less if interrupted by a
signal:

 - If the O_NONBLOCK flag is clear, write() shall block the calling
   thread until the data can be accepted.

 - If the O_NONBLOCK flag is set, write() shall not block the thread.
   If some data can be written without blocking the thread, write()
   shall write what it can and return the number of bytes written.
   Otherwise, it shall return -1 and set errno to [EAGAIN].

This "send all" behaviour is of slightly limited usefulness in POSIX, as
you still usually have to worry about the interruption possibility:

  - If write() is interrupted by a signal before it writes any data, it
    shall return -1 with errno set to [EINTR].

  - If write() is interrupted by a signal after it successfully writes
    some data, it shall return the number of bytes written.

But as mbed OS does not have the possibility of signal interruption, if we
strengthen write to write everything, we can make applications' lives
easier - they can just do "write(large amount)" confident that it will
all go in one call (if no errors).

So, rework to make multiple writes to the buffer, blocking as necessary,
until all data is written.

This change does not apply to read(), which is correct in only blocking until
some data is available:

 - If O_NONBLOCK is set, read() shall return -1 and set errno to [EAGAIN].

 - If O_NONBLOCK is clear, read() shall block the calling thread until some
   data becomes available.

 - The use of the O_NONBLOCK flag has no effect if there is some data
   available.
2017-11-21 09:51:36 +02:00
Russ Butler beb0b20e32 Use retarget defines where possible
Remove the condition code around the defines in mbed_retarget.h so
all toolchains use the defined values. Exclude a small subset of
values for GCC since these are in its standard header files.
2017-11-17 19:40:47 -06:00
Deepika 83409c5af3 Fixed: errno update failure with IAR8.2
errno (part of thread local storage) setting caused hardfault with IAR8.x
versions. TLS is not supported, hence using main thread TLS area for
all threads.
2017-11-17 13:12:39 -06:00
Martin Kojtal 4198695fab
Merge pull request #5485 from pan-/non-copyable-warning
Platform: Allow copy of non copyable objects
2017-11-16 16:14:42 +00:00
Martin Kojtal 41eb565d9c
Merge pull request #5342 from ARMmbed/feature_cortex_a
Update CMSIS/RTX with Cortex-A support
2017-11-15 11:24:36 +00:00
Vincent Coubard 80c9f8bd2f Platform: Turn NonCopyable compile time error into warnings.
Turn the compile time error issued when a NonCopyable resource is copied
into a compile time and runtime warning.

If the application is compiled with the debug profile the compile time
error remains.

The compile time error can be enforced by setting the library option
force-non-copyable-error to true.
2017-11-14 10:09:07 +00:00
Vincent Coubard 5310451c8f Platform: Add MBED_PRETTY_FUNCTION macro.
This macro yields a string literal of the enclosing function name.
2017-11-14 10:07:30 +00:00
Vincent Coubard 3aa4bf4346 Platform: fix end of line whitespace 2017-11-14 10:06:38 +00:00
Bartosz Szatkowski 048a896741 Update definitions of CPSR modes 2017-11-10 09:53:41 +00:00
Bartek Szatkowski 855844f5a1 Update CThunk to support new CMSIS Cortex A ops 2017-11-10 09:53:41 +00:00
Martin Kojtal 589d76e59f
Merge pull request #5058 from 0x6d61726b/patch-2
CircularBuffer(): get available transactions
2017-11-09 16:54:59 +00:00
Martin Kojtal fbd9e7eaf2
Merge pull request #5372 from SenRamakri/sen_PlatformDoxygenUpdates
Doxygen comments fixes
2017-11-09 16:38:45 +00:00
Jimmy Brisson 6912a9dc0d
Merge pull request #5393 from c1728p9/call_chain_deprecation
Deprecate CallChain and InterruptManager
2017-11-02 11:10:52 -05:00
Jimmy Brisson 551a2a3c66
Merge pull request #5373 from ARMmbed/g-fix-nodev-errno
fs: Correct errno when not finding a mounted filesystem
2017-11-02 10:40:19 -05:00
0x6d61726b 830db6a5a0
code style adopted 2017-10-31 16:07:33 +01:00
Senthil Ramakrishnan 37214ab695 Fix comments on mbed_assert.h 2017-10-27 15:38:44 -05:00
Russ Butler 891b06e61b Deprecate CallChain
This patch deprecates the CallChain class since it is an
internal API (not in mbed.h) and is only being used by
InterruptManager which is also deprecated.
2017-10-27 14:55:49 -05:00
Senthil Ramakrishnan 3ad298488c Doxygen comment updates and fixes 2017-10-26 15:36:26 -05:00
Christopher Haster 400c25466d fs: Corrected errno when not finding a mounted filesystem 2017-10-24 11:52:06 -05:00
0x6d61726b c1ab43ce76 Code style updated 2017-10-20 22:06:01 +02:00
Christopher Haster 32faaf65ee Change FileSystemHandle group to platform
Was drivers, should be platform, wasn't updated during move
2017-10-16 17:46:40 -05:00
Jimmy Brisson 493e3788e3 Merge pull request #5216 from kjbracey-arm/UARTSerial_wait
Avoid wait_ms() spin
2017-10-13 09:20:41 -05:00
Jimmy Brisson a67737f993 Merge pull request #5086 from pan-/systick_sleep_fix
Sleep: Disallow sleep for targets turning off the systick clock at sleep entry
2017-10-13 09:19:10 -05:00
Jimmy Brisson fad67559ae Merge pull request #5028 from c1728p9/ticker_api_changes
Update ticker to map closely to hardware
2017-10-13 09:18:02 -05:00
Anna Bridge 7b2b18f92f Merge pull request #5204 from geky/fix-retarget-defs
fs: Add missing retarget definitions for ARM/IAR
2017-10-06 11:53:05 +01:00
0x6d61726b 69e6f11c2d updates according to comments in pull request 2017-10-05 20:47:31 +02:00
Russ Butler 6452821e2e Add default implementation of timer info
Add weak implementations of *_ticker_get_info which returns 1MHz and
a width of 32 bits. This allows the updated Ticker API to work with
existing devices.

Note - in the future when all targets have implemented
*_ticker_get_info these weak functions will be removed.
2017-10-05 11:57:34 -05:00
Jimmy Brisson 0dc264fa86 Merge pull request #5212 from SenRamakri/sen_ATCmdParserChanges2
Merging changes from ATParser towards parser unification
2017-10-05 11:14:37 -05:00
Jimmy Brisson da138f20d7 Merge pull request #5203 from geky/fix-fstat-newlib
fs: Fix fstat retarget for regular files
2017-10-05 11:13:42 -05:00
Jimmy Brisson a0b624b62e Merge pull request #5038 from chrissnow/LPC1768-Bootloader
Lpc1768 bootloader support
2017-10-05 11:11:08 -05:00
Kevin Bracey de4ced33a6 Make poll() use wait(1) rather than yield()
Spinning while polling is overly CPU intensive, and inconsistent with
the current blocking behaviour of UARTSerial.

Change to use Thread::wait(1) to match UARTSerial.
2017-10-03 10:56:19 +03:00
Christopher Haster e9cd239ac3 fs: Added in missing retarget definitions for ARM/IAR
- missing O_ flags
- missing S_IF flags
- missing system types
- missing stat structure
- exhaustive list of errno codes
2017-10-02 16:12:22 -05:00
Russ Butler f0ac234da7 Prevent DeepSleepLock from leaving sleep locked
Add _lock_count to DeepSleepLock and use this to prevent deep sleep
from staying locked when the DeepSleepLock objected is destroyed after
an unbalanced number of calls to lock and unlock.
2017-10-02 11:34:56 -05:00
Senthil Ramakrishnan 3e1459b691 Merging changes from ATParser got AT parser unification 2017-10-02 10:03:58 -05:00
Senthil Ramakrishnan 7ffa3ddaaf Merging changes from ATParser towards parser unification 2017-10-02 10:03:58 -05:00
Chris Snow fb27e71894 Implement MBED_USED 2017-09-30 19:26:11 +01:00
Russ Butler 114d60c8ed Remove direct use of us ticker from platform
Update platform code to use the ticker common layer rather than using
HAL us ticker directly. This both ensures that the underlying ticker
is properly initialized and that the value read is in microseconds with
full 32-bit range.
2017-09-29 09:21:00 +01:00
Jimmy Brisson 01c864e9bb Merge pull request #5099 from mprse/move_clock_function
Move clock() function from mbed_rtc_time.cpp to mbed_retarget.cpp.
2017-09-28 14:05:35 -05:00
Jimmy Brisson 5bf224f1bf Merge pull request #5027 from geky/cb-fix-eq
cb: Fix uninitialized memory used for equality check
2017-09-27 15:14:59 -05:00
Przemyslaw Stekiel 035c0896ed Move clock() function from mbed_rtc_time.cpp to mbed_retarget.cpp. 2017-09-27 15:32:41 +02:00
Christopher Haster 01326910c0 fs: Fixed fstat retarget for regular files
GCC's newlib library depends on fstat to get in-flight information about
a file's type an size. A working fstat for regular files is needed for
seek and related functions to work correctly.
2017-09-26 21:41:13 -05:00
Martin Kojtal 6a46b9c0a7 Merge pull request #5165 from pan-/non-throwing-new-operator
Platform: Replace non throwing versions of new operator.
2017-09-26 15:08:18 +01:00
Vincent Coubard 017b8f0fc7 Platform: Replace non throwing versions of new operator.
This change prevents inclusion of non throwing versions of the new operator from
the compiler standard library. On GCC, the non throwing version bring with it
some portion of the exception support code.
2017-09-21 18:37:25 +01:00
Deepika 459e7d4725 IAR heap stats added 2017-09-18 10:24:01 -05:00
Anna Bridge 7b428916f5 Merge pull request #4949 from theotherjimmy/feature-armc5+armc6
NEW TOOLCHAIN: Add the ARMC6 Compiler
2017-09-13 10:39:15 +01:00
Vincent Coubard 682816d86e Sleep: Disallow sleep for targets turning of the systick clock at sleep entry.
When the RTOS is present and the tickless mode is not implemented, it is
expected that the next tick issued by the Systick timer will wake up the MCU.
However nothing prevents an implementation of the ARM architecture to gate the
systick clock signal upon sleep entry.

Therefore on those targets sleep shall be prohibited if the RTOS is present and the
tickless mode is not implemented.

To ease life of porters , a new option has been added in the device add list:
STCLK_OF_DURING_SLEEP. This option expose that the target turn of the systick
clock during sleep.

Targets which exhibit such behavior shall add this define in their device_has list.
2017-09-13 10:28:02 +01:00
Jimmy Brisson 41a6197208 Update mbed 2 discriminator 2017-09-11 13:20:33 -05:00
Jimmy Brisson b22a174c39 Correct semihosting check for ARMC6 2017-09-11 13:20:32 -05:00
Jimmy Brisson 15a9a0382b Enable Compiling with ARMC6 across all targets
remove duplicate sys.cpp
2017-09-11 13:20:32 -05:00
Jimmy Brisson 922bf1b619 Update mbed OS to handle ARMC6 requirements 2017-09-11 13:20:32 -05:00
Deepika 9422c351e4 Initial RTX and tools support for Cortex M-23/M-33 devices 2017-09-11 11:43:26 -05:00
Anna Bridge cab660d980 Merge pull request #4938 from deepikabhavnani/IAR_fixes
Update IAR to version 8
2017-09-11 17:28:38 +01:00
0x6d61726b 839cd7ee70 CircularBuffer(): get available transactions
This implementation returns the number of available (stored) transactions in the buffer
2017-09-08 15:33:14 +02:00
Martin Kojtal bc704427e2 platform: add DeepSleepLock
RAII object for disabling, then restoring the deep sleep mode
2017-09-07 15:35:06 +01:00
Martin Kojtal cb4e9b32a2 Sleep HAL: add sleep manager API
Sleep manager provides API to lock/unlock deepsleep. This API allows a user to
control deep sleep.

This API should be done via atomic operations (to be IRQ/thread safe).
2017-09-07 15:34:47 +01:00
Deepika 7d98eebf2a __IAR_SYSTEMS_ICC__ macro had issues when 7.5 and 8.11 both workbench are installed 2017-09-06 09:51:17 -05:00
Deepika bcb8779362 Internal members of std::FILE are not available from IAR8.x 2017-09-06 09:51:15 -05:00
Deepika 38e96ac432 __aeabi_read_tp function required for TLS in Dlib 2017-09-06 09:51:15 -05:00
Christopher Haster 382c0381c9 cb: Fixed uninitialized memory used for equality check
Fixed by zeroing the memory. A more "c++ correct" approach
may be to add an additional op for equality, and use the "=="
operator on the F type in the generate function. But this adds
the requirement that F supports equality.
2017-09-05 11:03:14 -05:00
Martin Kojtal 4ccff693ae Merge pull request #4962 from 0xc0170/dev_critical_section
platform: add CriticalSectionLock
2017-09-04 16:50:59 +01:00
Jimmy Brisson 2d65f49f61 Merge pull request #4954 from c1728p9/fix_isr_clear
Fix ISR powerdown in mbed_application.c
2017-08-29 13:46:25 -05:00
Martin Kojtal be8174f94f platform: add CriticalSectionLock
Critical section class RAII addition
2017-08-29 12:47:04 +01:00
Jimmy Brisson 7252447385 Merge pull request #4920 from scartmell-arm/led-error-sequence
Modify LED error sequence to be more recognisable
2017-08-24 10:14:13 -05:00
Jimmy Brisson dd0a0fc3e7 Merge pull request #4831 from fahhem/less_scanf
Remove excessive use of printf/scanf in mbed_fdopen/_open
2017-08-24 10:12:10 -05:00
Russ Butler 29ad5bb09b Fix ISR powerdown in mbed_application.c
Fix a calculation error in in powerdown_nvic preventing the last
group of 32 interrupts from getting powered down. The ARMv7m reference
manual states "the total number of interrupt lines is up
to (32*(INTLINESNUM+1)).".

Also rename isr_count to isr_groups_32 for clarity, since this is
actually the number of 32 interrupt groups.
2017-08-22 10:54:18 -05:00
Jimmy Brisson a457fe3bdd Merge pull request #4908 from geky/fs-reformat
fs: Add FileSystem::reformat
2017-08-21 10:38:00 -05:00