Recently I was doing a Post graduate diploma course on Embedded Systems. During the last month we had to come up with a project to execute during the month. I decided to add support for the CAN peripheral in the FreeRTOS + IO Project. After studying the source code and understanding the architecture of FreeRTOS + IO, I made changes to the code so that the CAN peripheral could now be accessed via POSIX-like open(), read(), write() and ioctl() calls. I managed some basic communication between two microcontrollers using the driver I wrote but I was short of time so the driver code was very badly done. This was around 6 months ago, and I have some free time on my hands now so I was thinking I should look into this project again as studying the internals of FreeRTOS helped me learn a lot earlier.
I am a relative newbie in the embedded world (only a year and a half of experience) and hence I had a few doubts about the transfer modes used with FreeRTOS + IO. I was not able to decide on any mode to use with CAN.
Also, CAN is a much bigger protocol than SPI or I2C, so I wanted suggestions as to what features could be included in the driver and which can be done away with.