Releases: flit/argon-rtos
Releases · flit/argon-rtos
v1.3.0
Features
- Thread context switch tracing via ITM. Enabled via a new
AR_ENABLE_TRACE
config macro. - Each thread's stack top address is saved and used to check for stack overflows, in addition to the existing stack canary.
- Rewrote scheduler code to take advantage of the sorted ready list.
- Made kernel calls in IRQ context more efficient by preventing an unnecessary extra trip through PendSV due to the deferred action, since the scheduler will always run immediately after deferred actions, anyway.
ar_thread_suspend()
andar_thread_resume()
can now be called from IRQ context.ar_timer_set_delay()
is now callable from interrupt context.- Added 8- and 16-bit atomic operations. The previous atomic operation APIs were renamed to be 32-bit.
- Thread reporting improvements.
- Added unique ID, stack usage, and stack size to thread report.
- Added
getLoad()
andgetStackUsed()
methods toAr::Thread
. - Added
ar_thread_get_stack_used()
C API. - Changed prototype of
ar_thread_get_report()
to make report param more clearly an array. (Changed*
to[]
.)
Changes
- Reduced size of
ar_timer_t
structure. - The default value of the
AR_IDLE_THREAD_STACK_SIZE
config macro was changed to 200 bytes. - Function pointers are used internally for deferred IRQ actions, to improve linker garbage collection.
- Removed an unnecessary loop in the internal linked list remove item code.
- Generating a unique, monotonically incrementing ID for each thread.
- Moved
ar_config.h
tosrc/
directory. - Returning
kArNotFromInterruptError
from all APIs that cannot be called from IRQ context. - Changed
ar_runloop_run()
to returnar_status_t
. - Removed thread parameter from
ar_runloop_create()
. - Some formatting cleanup in
ar_kernel.h
. - Several internal code improvements.
- Added several more asserts to internal code.
Fixes
ar_runloop_add_queue()
returns error if queue is already attached to another runloop.- Fixed issues with pending queues attached to runloops.
- Fixed issue with stopping periodic timers from within the timer callback.
- Fixed race condition in
ar_kernel_update_thread_loads()
if an IRQ caused a thread list head to change. - Fixed issue with tickless delay scheduling that could cause the next wakeup to be pushed out indefinitely.
- Fixed double delays when
ar_timer_set_delay()
is called from the timer callback. - Fixed issues caused by
ar_timer_set_delay()
being deferred when called from IRQ context. - Fixed round-robin scheduling regression.
- Include path fixes. (Thanks Patrik Bachan!)
- Fixed a +1 error on SysTick reload value computation. (Thanks Patrik Bachan!)
- Made some changes to prevent compilation warnings. (Thanks Patrik Bachan!)
- Fixed
Ar::Channel
constructor not passing the width param toinit()
.