Newbie. My programs (the few I've written, a long long time ago) have always been kind of brute force (if this, then that) just controlling buttons, on chip A/Ds, and LEDs/IOs. I want to 'up' my game by getting a better understanding of the various different multitasking architectures/approaches, and use some practice exercises to develop code, learn, and add these concepts to my personal toolbox of techniques. I've heard terms like polling, interrupt driven, system tick, cooperative, preemptive. As a development platform, I'm using the ATmega328P Xplained Mini, which has a button, LED, and UART (or, I guess they call it USART). I know it's got limited stuff on it so any multitasking exercises would be very contrived, but the Xplained Mini is really convenient (super cheap, really small board, connect direct to computer without separate emulator, I can toss in my backpack and play around at Starbucks, I've got those elements (button, LED, UART to/from RealTerm) working ... later, after getting a better handle on multitasking through these exercises, I'll add an Arduino prototyping shield with some I2C and SPI components to get some practice in chip/chip communication).
So, with a button, LED, and UART, I'm looking for your suggestions of some contrived exercises I could implement to get broad exposure to various multitasking approaches/architectures. Thanks!