Creating FreeRTOS Architecture Diagrams

I was wondering how other people create documentation supporting a FreeRTOS based application. So far I have been using Visio with some success–showing the flow of data between tasks with queues is simple enough. However once you start having semaphores and mutexes around it gets a little more complicated! Does anyone have some good examples of a nice looking flow chart? What engineer doesn’t love a great diagram?!?!?

Creating FreeRTOS Architecture Diagrams

I typically create one overall interaction diagram showing each “execution unit” (a Task, ISR, Timer Call back, or driver subroutine), each Hardware device, each major datastore, and each major queue/semaphore/mutex with arrow showing their interrelationships. For example, if an ISR triggers a driver task with a semaphore, the Device symbol will point to the ISR with an interrupt arrow, the ISR to the semaphore, the semaphore to the driver task and the driver task to the device. The driver will also have any arrows needed to indicate what it does with the results from the device. I then document the flow of each task individually (with links out representing these interactions).