2019-02-20 16:56:41 +01:00
2019-02-20 16:29:59 +01:00
2019-02-20 16:51:28 +01:00
2019-02-20 16:29:36 +01:00
2019-02-20 16:29:36 +01:00
2019-02-20 16:29:36 +01:00
2019-02-20 16:56:41 +01:00
2019-02-20 16:29:36 +01:00
2019-02-20 16:29:36 +01:00

Mutlithreading for the Tiva C series

This project is a PoC of an ASM multithreading implementation for ARM Thumb devices.

Project contents:

  • Threading (pthread.asm)
    • Start thread: (threadstart)
    • Stop thread: (threadexit)
    • Thread fencing:
      • Lock (threadlock)
      • Unlock (threadunlock)
  • Memory management: (malloc.asm)
    • Malloc_init: (minit)
    • Malloc: (gtmalloc)
    • Free: (free)
    • Memcpy: (memcpy)
    • Memset: (memset)

Some notes:

To make use of threading, malloc has to be enabled (to store a thread's stack). To enable malloc, simply call minit. This prepares the first element in the double-linked list to cover the entire 32KiB heap aside from the memory allocated for the stack.

The threading system uses the built-in SysTick system to determine how many instructions each thread is delegated before a thread-switch operation is triggered. The amount of instructions allowed can be set by changing the constant STRST.

Thread fencing allows a thread to request extra time-frames for itself. As it stands at the moment, thread-fencing will always be allowed, since it was designed as a way to making thread-unsafe operations virtually atomic. I would be very hesitant to use thread-fencing, since, if timed incorrectly in, for example an infinite loop, it could cause the thread to inexplicably take full control of the processor by always being fenced when a thread-switch is triggered, thus preventing any switches. This is why I would heavily reccomend manually setting the SysTick timer value to 0 after unlocking: so that a successful thread-switch is attempted (in case one was missed when the thread was locked).

TODOS:

  • Automatic thread-switching after unlock if a switch was missed
  • Smarter malloc
  • Dynamic thread-count updating
  • Faster thread-switching
  • Runtime thread-instruction variability

Tested platforms:

  • Tiva C-series
    • TM4C123GH6PM (Evaluation board: TM4C123GXL)
Description
No description provided
Readme 56 KiB
Languages
Assembly 55.3%
C 40.5%
Batchfile 4.2%