I have just started with embedded programming but been writing enterprise software for many years.
I have just pulled together a base NMEA 2000 / J1939 protocol stack. Currently I have support for a limited number of PGNs but I do have support for single and fast frame NMEA2000 messages. The current project is to create NMEA 2000 transducer that will read analog engine data and broadcast PGNs 127488 (engine Rapid), 127489 (engine dynamic), 127505 (fuel level). The protocol stack is built to quick add additional PGNs with minimal amount of code.
Also I'm finishing up support for address claim and other NMEA 2000 group functions. If you are interested in working with me on adding additional capabilities and functions let me know. The current implementation runs on Arduino Uno with Sparkfun CAN-bus that uses MCP2515 CAN controller.