Commit Graph

716 Commits (7ed16fbd76a62d2471545dfdc0797f8ffaa7e176)

Author SHA1 Message Date
Cruz Monrreal e6caa122cb
Merge pull request #9812 from kjbracey-arm/wait_ns
Add wait_ns API
2019-02-28 18:21:46 -06:00
Cruz Monrreal eff8b1dbd1
Merge pull request #9800 from theotherjimmy/bm-lib
Bare-metal profile
2019-02-28 18:21:32 -06:00
Jimmy Brisson d1de429f82 Create the bare-metal library 2019-02-27 12:14:02 -06:00
Cruz Monrreal e1736cd06f
Merge pull request #9571 from mprse/fix_9523_rtos_less_issue
Update to 2-region model for HEAP and Stack Memory
2019-02-26 22:50:19 -06:00
Kevin Bracey 91b22f8bf3 Hand assemble to get alignment 2019-02-26 17:30:52 +02:00
Kevin Bracey 7215515880 Add wait_ns API
This provides the ability to generate really small delays - it's often
the case that wait_us() takes multiple microseconds to set up, so
having an alternative suitable for <10us delays is useful.

There have been a few local implementations - it makes sense to
centralise them as they need retuning for each new ARM core.

Based on the local implementation inside the Atmel 802.15.4 driver.
2019-02-26 17:30:51 +02:00
Martin Kojtal 5f38878f3a
Merge pull request #9791 from sarahmarshy/m0-start-app
Support mbed_start_application for Cortex-M0+
2019-02-25 09:40:37 +01:00
Sarah Marsh 3b98ebc5be Change to MOVS for all targets 2019-02-22 14:35:21 +00:00
Sarah Marsh 3c51257524 Change MOV to MOVS for M0+ 2019-02-22 13:22:12 +00:00
deepikabhavnani 387e4ca9f4 New heap can be equal to heap limit for last chunk 2019-02-21 17:20:49 -06:00
Senthil Ramakrishnan 3fb8224237 Update mbed_stats.c to use __ARMCC_VERSION flag to be compatible with AC6 2019-02-21 17:12:09 -06:00
Sarah Marsh 15b573d83e Reuse nvic powerdown code block for M0+ 2019-02-21 16:07:26 +00:00
Sarah Marsh 7201cab3c4 Support mbed_start_application for Cortex-M0+ 2019-02-21 11:17:51 +00:00
deepikabhavnani 1a1c74c38b mbed_rtx.h not to include in platform 2019-02-19 15:49:49 -06:00
Deepika f13a3e32b6 Fix GCC _sbrk allocation 2019-02-19 15:49:49 -06:00
deepikabhavnani b36147fbe9 ISR_Stack_start/size defines are not needed, use linker file defines 2019-02-19 15:49:49 -06:00
deepikabhavnani 9d1ce66b14 ISR_STACK_START/ HEAP_START defines not used by GCC_ARM toolchain 2019-02-19 15:49:49 -06:00
Deepika 537b3646d3 Resolve build/type cast errors 2019-02-19 15:49:49 -06:00
Deepika 41eaefeeb4 Update memory model for stack and heap memory
Memory model for RTOS and No RTOS was initially single stack and heap,
only few targets implemented 2-region RAM model.

2-region RAM model is applied for all toolchains and targets.

GCC: __wrap__sbrk was implemented for 2-region ram model, with switch to 2-region
for all targets, we do not need target specific implementation of this API
Also _sbrk is WEAK function, hence can be over written in target folder for
special cases
2019-02-19 15:49:45 -06:00
Przemyslaw Stekiel 9c11288eb1 mbed_retarget.cpp: Fixed style 2019-02-19 15:46:32 -06:00
Przemyslaw Stekiel a3223275c2 Use 2-region memory model in ARM rtos-less builds.
The following commits: #8039, #9092 added Boot/ISR stack definition to all scatter files (ARM_LIB_STACK).

This has changed memory model for RTOS-less builds to 2-region memory model and caused failure in case of rtos less builds.
This PR defines valid heap/stack regions for rtos-less builds.
2019-02-19 15:46:21 -06:00
Michael Schwarcz 1db4e4634f mbed_retarget changes
- Avoid compiling user_setup_stackheap for TF-M secure targets
- Align sbrk for TF-M
2019-02-19 15:19:04 +02:00
Cruz Monrreal 5701c94384
Merge pull request #9714 from deepikabhavnani/cleanup_linker_files
Only GCC_ARM toolchain is supported, removing legacy code
2019-02-14 20:26:05 -06:00
Martin Kojtal 1492dc1e2a
Merge pull request #9685 from scartmell-arm/fix-sleep-tracer-lookup-failing
Fix sleep tracing not finding matching driver during unlock.
2019-02-14 13:16:11 +01:00
deepikabhavnani 818d38b6ae Only GCC_ARM toolchain is supported, removing legacy code 2019-02-13 16:26:22 -06:00
Steve Cartmell 3f12c19adf revert: "Refactor sleep tracing driver identifier to be pointer to the driver filepath."
This reverts commit 9a0e8797b9.
2019-02-13 11:27:22 +00:00
Martin Kojtal a477354292
Merge pull request #9693 from naveenkaje/mbed_error_warning_fix
platform: fix build warning in mbed_error
2019-02-13 11:40:46 +01:00
Cruz Monrreal 709e6ff795
Merge pull request #9600 from kjbracey-arm/atomic_exchange_64
Atomic extensions: 64-bit, bool, exchange
2019-02-12 20:28:00 -06:00
Naveen Kaje de271d4ba8 platform: fix build warning in mbed_error
Fix the following build warning

Compile [ 83.4%]: mbed_error.c
[Warning] mbed_error.c@71,21: 'compute_crc32' defined but not used [-Wunused-function]

compute_crc32 usage is guraded with #define, but not the definition.
Use the same #define around the definition of compute_crc32()
2019-02-12 16:20:25 -06:00
Martin Kojtal 10bb66a053
Merge pull request #9424 from SeppoTakalo/ONME-4125
Allows multiple network status listeners
2019-02-11 10:41:35 +01:00
Veijo Pesonen 8bf6c6b9bf platform: includes string.h needed by memcpy and strlen 2019-02-07 12:17:08 +02:00
Kevin Bracey 9e7c65925d Add signed atomics
All signed implementations are inline - either directly or as inline
calls to out-of-line unsigned definitions.
2019-02-05 10:57:23 +02:00
Kevin Bracey 694adaae8b Add atomic exchange 2019-02-05 10:53:30 +02:00
Kevin Bracey a71984093a Add bool atomics 2019-02-05 10:46:40 +02:00
Kevin Bracey f8e3f5dc2c Add 64-bit atomics 2019-02-05 10:45:40 +02:00
Martin Kojtal 6684570dea
Merge pull request #9580 from kjbracey-arm/sharedptr_reset
Fix SharedPtr::reset
2019-02-04 14:41:34 +01:00
Kevin Bracey 94f5646303 Atomics: make barrier placement uniform 2019-02-04 15:08:53 +02:00
Kevin Bracey 52aac4c756 SharedPtr: use atomic load
Use atomic load to read use count.
2019-02-01 12:31:41 +02:00
Kevin Bracey 0b27c9149e Fix SharedPtr::reset
SharedPtr::reset did not actually set the stored pointer value.
Correct this, with other minor tidies:

* Ensure counter is set to NULL if pointer is reset to NULL
* Be consistent about not clearing pointers in decrement_counter().
2019-02-01 10:34:34 +02:00
Cruz Monrreal 0fb2870cfc
Merge pull request #9530 from kjbracey-arm/atomic_singletonptr
Use atomics for double-checked locks (SingletonPtr + __cxa_guard)
2019-01-31 10:22:39 -06:00
Seppo Takalo 207eddc321 Fix copy constructors of Callback objects
->move() operator was not touching unused data fields, therefore
leaving uninitialised data and failing the comparison.
Fixed by initialising all fields to zero before moving.
2019-01-31 15:04:24 +02:00
Cruz Monrreal cc94690363
Merge pull request #9544 from kjbracey-arm/reboot_limit_fix
Halt to enforce reboot limit once only
2019-01-30 17:32:55 -06:00
Kevin Bracey 3056ba730c mbed_die: Use wait_us not wait_ms
mbed_die was calling wait_ms in a critical section - this is deprecated
behaviour, and caused a fatal error in debug builds, potentially leading
to an infinite reboot loop if this was caused due to a reboot limit
halt.

Switch to using wait_us - this is safe in a critical section. This does
trigger a call to mbed_warning, due to the large parameter, but that is
harmless - it doesn't output anything to the console, and won't
overwrite the error context if it already contains something.
2019-01-30 13:29:13 +02:00
Kevin Bracey d55640340d Halt to enforce reboot limit once only
The pre-main check of error_reboot_count was applied repeatedly on
every boot, meaning that once the reboot limit was hit, every subsequent
reset would halt before main, until something managed to clear
or corrupt the error context.

Set the is_error_processed flag before halting, so that when an external
agent resets us while we're halted, we do not report the error and halt
again.
2019-01-30 12:58:25 +02:00
Kevin Bracey 6e3c492cd8 mbed_retarget.cpp: Combine ARMC5 and ARMC6 tests
A couple of places in mbed_retarget.cpp were testing for either ARMC5 or
ARMC6 in a long-winded fashion. Testing for __ARMCC_VERSION being
defined is sufficient.
2019-01-29 17:49:19 +02:00
Kevin Bracey c55329157a Use atomics in __cxa_guard functions
Similar to SingletonPtr, use atomic accesses when loading the guard word
outside the lock, and when storing, to ensure no races for threads that
don't take the lock.

Lack of atomics unlikely to be a problem in current builds, but code
could conceivably be subject to reordering if link-time optimisation was
enabled.
2019-01-29 17:49:18 +02:00
Kevin Bracey 6e41d6cdb7 Make SingletonPtr safe using atomics
SingletonPtr's implementation wasn't totally safe - see "C++ and the
Perils of Double-Checked Locking"by Meyers and Alexandrescu. No problems
observed in practice, but it was potentially susceptible to compiler
optimisation (or maybe even SMP issues).

Now that we have atomic loads and stores, the function can be made safe,
avoiding any potential races for threads that don't take the lock:
ensure that the unlocked load is atomic, and that the pointer store is
atomic.

See https://preshing.com/20130930/double-checked-locking-is-fixed-in-cpp11/
for more discussion.
2019-01-29 16:01:33 +02:00
Kevin Bracey f60bb8f3a7 Second barrier for core_util_atomic_flag_clear
As barriers were added in #9247, review comments pointed out that atomic
stores needed a second barrier, and they got one. But atomic_flag_clear
was missed.
2019-01-29 10:45:20 +02:00
Senthil Ramakrishnan d0b95031c5 Print crash report reboot messages only for non-release builds 2019-01-23 17:40:05 -06:00
Senthil Ramakrishnan cc5969b1ec Remove printf completely and fix the optimization check 2019-01-22 16:04:47 -06:00