goodinventor:
Well, I see that a real-time operating system for scheduling tasks would be really useful for the Arduino. I think I simply need to restructure my approach.
Yes, pick a single problem and work towards that. Don't try to do everything.
A task scheduler is a good idea, but that's all it is: a task scheduler. Please don't call it a real time operating system, it simply isn't.
Here is an example of an Arduino task scheduler: Metro It provides a mechanism to set up a periodic time base, and you call a function to determine if it's time to perform your function. If it returns true, do your periodic process. A library along those lines is a good fit for an Arduino. The limitation here is that the periodic tasks are small functions that must run to completion before the next task can be considered.
A more advanced library is Scheduler which schedules the running of multiple tasks that can run in parallel: one task doesn't have to complete before the next task has a chance to run. But keep in mind that this library is only for an Arduino Due, which has an ARM processor making it much more capable than an Uno class Arduino. Its processor is closer to the class found in a small Linux computer.
See the trend here? Simple processor, simple functions; more complex processor, more complex functions.
When planning a software project, the first step is to figure out the requirements and what you want to accomplish. Then you can choose a processor that has enough power to do what you want to do. In the latter case (running several tasks in parallel) the Uno class machine simply can't do it because it doesn't have enough RAM to hold a stack for each process, something that is necessary to be able to switch between multiple parallel processes. (Hint: don't try to come up with a scheduling system until you fully understand the basis behind that last statement.)