I only use the PASM (PRU assembler) for programming the PRUs on the BBB. I’ve had some issues with the TI C compiler.
The best reference for the PRUs can be found in the GitHub reposotory here: https://github.com/beagleboard/am335x_pru_package
In this repository is the best guide I’ve found for writing assembly code for the PRU as well: https://github.com/beagleboard/am335x_pru_package/blob/master/am335xPruReferenceGuide.pdf
This guide is really long, but some sections are actually worth reading through before you start writing any code. I would recommend reading section 5.3 Basic Programming Model. This section begins by talking about how to call the PSAM assembler and then goes into all of the instructions available to the PRU.
Also if you’re brave, be sure to check out the 5,000+ page AM335x Technical Reference Manual: http://www.ti.com/lit/ug/spruh73p/spruh73p.pdf
Also, the best quick introduction I’ve found to how the PRU works can be found here on Ken Shirriff’s blog: http://www.righto.com/2016/08/pru-tips-understanding-beaglebones.html
Here is another good introduction to the PRU and UIO: http://catch22.eu/beaglebone/beaglebone-pru-c/