Skip to content

Releases: flit/argon-rtos

v1.3.0

23 Sep 22:05
Compare
Choose a tag to compare

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() and ar_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() and getStackUsed() methods to Ar::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 to src/ directory.
  • Returning kArNotFromInterruptError from all APIs that cannot be called from IRQ context.
  • Changed ar_runloop_run() to return ar_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 to init().