by aek » Tue Feb 08, 2011 1:58 pm
1. If your waiting task has a priority lower than any eligible task, it will not run until the higher-priority task is no longer eligible. You have a task at prio 7 -- what does it do?
2. Make sure that you are not using local (auto) variables in your tasks -- they are generally not allowed, and it's easy to forget that, with attendant side effects.
3. Make sure your OSTASK and OSEVENTS etc. are set properly in salvocfg.h.
4. Salvo's internals are not for the faint-of-hgeart ... but if you have Pro, you can trace your way through e.g. the signaling of an event. Errors returned can lead to insight into a problem. No errors return indicates -- in my experience -- that the user has made a runtime error (e.g., having a constantly-running eligible task that prevents a lower-priority task from ever running), which must be addressed by changes to the program (e.g. by elevating a task's priority).
5. Event control blocks are in OSecbArea[] by themselves, they are simpler than task control blocks.
When I originally saw the title, I felt that I should repeat the scheduler's golden rule: "The scheduler runs the most eligible task." While it may be counterintuitive, the scheduler is _not_ responsible e.g. for signaling of events ... that's because (in part) event signaling is an event, and the scheduler operates more like a polled process because it analyzes the various (priority and delay) queues and acts accordingly, but does so on a polled basis (e.g., as fast as it is called).
-------
aek