kmonroe023 Posted December 30, 2015 Posted December 30, 2015 I'm trying to use GetPmacStatus in usrcode.c to get the program running status of a coordinate system. However I can't get usrcode.c to compile if I call GetPmacStatus. If I comment out the line that GetPmacStatus is on, usrcode.c compiles and runs as expected. // code char strCoord[]="Coord[1].ProgRunning"; char *strPntr = strCoord; double CoordProgRun = 0; . . CoordProgRun = (double)GetPmacStatus(strPntr); // end of code Here is output from err.log (I snipped out some of the path text): /cygdrive/c/Users/..../usrcode.c: In function 'CfromScript': /cygdrive/c/Users/..../usrcode.c:96: error: implicit declaration of function 'GetPmacStatus' make[2]: *** [/cygdrive/c/Users/..../usrcode.o] Error 1 make[1]: *** [_module_/cygdrive/c/Users/....] Error 2 make: *** [all] Error 2 Any idea what I'm doing wrong? I'm still in the process of learning C so please let me know if I'm making a mistake in how I use the API call. Thanks, kmonroe
Omron Forums Support Posted January 4, 2016 Posted January 4, 2016 You have to include gplib.h at the top of your C program like this: #include If it is a background C program, you have to initialize the library, place your code, and then close the library. Example program that builds fine: #include // Global Gp Shared memory pointer #include "../../Include/pp_proj.h" int main(void) { int Status = 0; InitLibrary(); Status = GetPmacStatus("Coord[2].ProgRunning"); CloseLibrary(); return 0; } If it is in kernel space (e.g. in usrcode.c), certain functions, such as this one, are not available, but you can access the vast majority of Power PMAC structures directly through the pshm pointer. For the structures that are computed, and not directly accessible, such as ProgRunning, you can compute them. Here is the logic for three Coord bits you have to compute: if ((pshm->Coord[n].Ldata.Status & 0x2e) == 0x20) then Coord[n].ProgRunning returns 1 else 0. if ((pshm->Coord[n].Ldata.Status & 0x20) == 0x20) then Coord[n].ProgActive returns 1 else 0. if (((pshm->Coord[n].Ldata.Status & 0x2e) == 0x20) && (pshm->Coord[n].FeedHold != 1)) then Coord[n].ProgProceeding returns 1 else 0.
Recommended Posts