Hi Ilya,
Thanks for the reply.
I'm not being paid to do this work nor is it a work for hire, but I am working on an idea that I might end up selling if I think it will be useful to more people. My intent on this initial project is primarily to learn but also invest in tooling (i.e. an RTOS, networking stack, etc) that I can use in future projects.
About my current requirements, the straight-forward answer is my current project absolutely does NOT need any genuine "real-time" capability (i.e. I'm not implementing a PID control-loop for motor control, etc) but it has a basic LED-based UI, PWM, timers, buttons, etc. The system can naturally be broken down into well defined 'tasks' (update_ui, process_inputs, update_outputs) so I was hoping to not kludge my own baremetals 'tasker'.
In the past I worked on a pretty "substantial" embedded wireless project (AVR+RFIC) which I did purely baremetals / super-loop as a proof of concept. The proof of concept worked out fine but as expected, when more formal requirements came down and functionality got added it became a real mess to work on. In retrospect it was really the perfect candiate for an RTOS (it did need determinism, priorities, low-latency and concurrency). Debugging that project was painful and a lesson in the importance of good architecture first, implementation later after you know the answers to key questions (and have requirements).
Regarding NuttX, that's a great suggestion, I've worked with it in the past on Pixhawk drone CPUs. I think NuttX is appropriate for a >=256KB flash type devices (which I think of more in the uP territory) but I'm not looking to do anything that "complex" with a uC right now.