Hello --
In response to questions #1 and #2 (fidelity of the signal acquisition), this is almost certainly a hardware problem. One possibility could be a ground loop on the negative side of your 4472 input channel. The signal connected to the negastive (i.e. cable shield) side of each input channel should not differ from chassis ground by more than +/- 2.5 V. If your function generator is a floating source, this should not be a problem, but it can easily become an issue if you are using a grounded/referenced source. If you are not sure about the grounding configuration of your source, I would recommend trying a 9 V battery (certainly floating). If you cannot read this voltage correctly, I'd suggest sending the board in for repair.
As for the second issu
e (spontaneous reboots), my recommendation is to include a feature in your code that will allow the user to stop an acquisition in progress and clear the acquisition properly. An acquisition requires resources from both user and kernel memory spaces. If you stop an acquisition in progress (such as forcing an exit from the debugger) without making a call to DAQ_Clear to stop it, you sever the user connection but the DMA and kernel portions continue on their own. If this happens, the aquisition may continue overwriting kernel memory indefinitely, eventually corrupting something important in the application or the OS, resulting in an ungraceful reboot. Unfortunately this isn't a very nice behavior, but the real solution is to try to build the capability for a clean exit into your application as quickly as possible.
Hope this helps!