3 #define SIZEOF_VOID_P 4
6 #define SIZEOF_DOUBLE 8
7 #define msecsleep(x) (x)
14 void my_assert(
char const*s,
int d) {
15 fprintf(stderr,
"Err:%s:%d\n", s, d);
24 static const unsigned int CB_TRANSFER_SIZE = 16;
27 uInt32 m_genBufCOLowTicks[CB_TRANSFER_SIZE * NUM_CO_CH];
28 uInt32 m_genBufCOHighTicks[CB_TRANSFER_SIZE * NUM_CO_CH];
31 void _CHECK_DAQMX_RET(
int ret,
const char *file,
int line) {
34 DAQmxGetExtendedErrorInfo(str,
sizeof(str));
35 fprintf(stderr,
"%s\n@ %s: %d\n", str, file, line);
40 #define CHECK_DAQMX_RET(ret) _CHECK_DAQMX_RET(ret, __FILE__, __LINE__)
45 _genCallBackCO(TaskHandle task, int32 signalID,
void *data)
51 CHECK_DAQMX_RET(DAQmxSetCOPulseLowTicks(m_taskCO,
"Dev1/ctr0",
52 m_genBufCOLowTicks[cnt]
55 cnt = cnt % CB_TRANSFER_SIZE;
59 main(
int argc,
char **argv)
61 for(
int i = 0; i < CB_TRANSFER_SIZE; i++) {
62 m_genBufCOLowTicks[i] = i * 10000 + 200;
63 m_genBufCOHighTicks[i] = 10000;
67 CHECK_DAQMX_RET(DAQmxCreateTask(
"", &m_taskCO));
69 CHECK_DAQMX_RET(DAQmxCreateCOPulseChanTicks(m_taskCO,
70 "Dev1/ctr0",
"",
"20MHzTimebase", DAQmx_Val_Low, 100,
73 CHECK_DAQMX_RET(DAQmxCfgImplicitTiming(m_taskCO,
81 CHECK_DAQMX_RET(DAQmxRegisterSignalEvent(m_taskCO,
82 DAQmx_Val_CounterOutputEvent, 0,
83 _genCallBackCO, NULL));
85 CHECK_DAQMX_RET(DAQmxStartTask(m_taskCO));
87 for(
int cnt = 0; cnt < CB_TRANSFER_SIZE; cnt++) {
97 DAQmxStopTask(m_taskCO);
98 DAQmxClearTask(m_taskCO);