|
|
- More efficient use of the stack when waiting on semaphores
- Removed the need to use static storage in the task switcher. However, switch/case statements use the stack, so changed that so that it used if/else instead.
- Cleanup of function names, macro names, struct names etc
- Work around for a major problem with the task switcher. Every time we entered the task switcher, the stack pointer was using the system stack. However, the compiler expected the Y register to be pointing to the stack as well (or maybe n bytes below the stack pointer, where n is the number of local bytes of storage this function needs). Since it usually wasn't, we ended up with memory corruption and hence a crash. The work-around was to change the task switcher so that it doesn't use local storage - all variables in the task switcher use static storage.
- Added wait_for_increment_of_timeout() - for completeness
- Added the ability to timeout while waiting on semaphores, mutexes etc.
- Added proper return values to functions
- Fixed another race condition with mailboxes that was leading to deadlock
- I now have just one ISR-related macro - TASK_ISR() - and ISRs may now decide if a task switch should occur
- Added
init_data to the tasks - the task function now takes a void * argument
- Fixed a bug with write_mbox() and wait_for_receiver() - an incorrect algorithm was being used to see if another task was waiting on the mailbox, which could (and did) lead to deadlock.
wait_for_mutexes no longer ignored when stop_task() is called on current_task
- Added
wait_for_mutexes to stop_task()
- Changed write_mbox() so that the number of receivers could be specified, and added the "nullify" feature
- Updated and re-organised the documentation
- Removed noticeboards, and replaced them with proper mailboxes
- Fixed a few bugs
- Started proper doxygen documentation
- If a task is stopped while holding mutexes, the mutexes will be released
- Fixed a memory leak bug with non-empty mailboxes on stopping tasks
|