other problem .... I try to copy my project on ubuntu 18.04 pc with gcc 7.4 .... I have a lot of warning .... the major issue seems stdio.hand cstdlib is not well accept from qt + gcc7.4 ..... wath is the ideal version of gcc for use with Linuxcnc file?
Il giorno ven 27 dic 2019 alle ore 18:47 N <nicklas.karlsso...@gmail.com> ha scritto: > EMC_TASK_SET_STATE state_msg; > There is no malloc because memory is allocated automatically then function > is entered and deallocated automatically then it exit. It is allocated > stack like and most probably on the stack but are not sure this is always > the case. > > Local variable I consider the best method to allocate memory then it could > be used for several reasons, usually most important because it is a local > variable. But it also have advantage memory could be allocated with > increasing pointer, this is fast and deterministic. Think ADA have a method > so that pointer to allocated memory is not remembered by misstake at > compile time but not C/C++. If you do not know what the stack is, it is a > pointer to a memory set aside this purpose, then a function is called > adress before jump is stored on stack while stack pointer is updated > increased/decreased, then function exit it is the opposite order. malloc > have to find a free area while stack like memory just increase/decrease a > pointer but it only work for local variables in functions. > > > Variable is initialized by row below although I are not sure all fields > are initialized. Compiler may warn if it is not initialized but as I > remember it will not warn if some fields are unitialized. > state_msg.state = EMC_TASK_STATE_ESTOP; > > > malloc return a pointer to "void" which is more or less equivalent to > pointer to unknown data type which must be the reason you get "no viable > conversion from int to EMC_TASK_SET_STATE" warning. You have to use type > conversion to get rid of warning (EMC_TASK_SET_STATE)malloc(...) and make > sure correct size is allocated by using sizof(...) and you also have to > remember deallocate/free memory then not used anymore but not before. > > > > > > > > > > > Memory may be allocated with malloc but unless function > > > emcCommandBuffer->write(...) store the pointer internally, copy data > > > internally is below might be a much better idea. If state_msg variable > is > > > not used further down or at least is not supposed the block will also > limit > > > life time of variable. > > > > > > > this row of code is extract from shcom.cc: > > > > int emcCommandSend(RCS_CMD_MSG & cmd) > > { > > // write command > > if (emcCommandBuffer->write(&cmd)) { > > return -1; > > } > > emcCommandSerialNumber = cmd.serial_number; > > return 0; > > } > > > > int sendEstop() > > { > > EMC_TASK_SET_STATE state_msg; > > > > state_msg.state = EMC_TASK_STATE_ESTOP; > > emcCommandSend(state_msg); > > if (emcWaitType == EMC_WAIT_RECEIVED) { > > return emcCommandWaitReceived(); > > } else if (emcWaitType == EMC_WAIT_DONE) { > > return emcCommandWaitDone(); > > } > > > > return 0; > > } > > > > but there is not malloc for state_msg and not see where is initialized > .... > > > > In my row code is the same situation .... but if try to use malloc obtain > > warning like "no viable conversion from int to EMC_TASK_SET_STATE" .... > is > > because I try to use malloc with bad variable type? > > In my QtDro.h file I use these .hh file of Lcnc: > > > > #include "include/cmd_msg.hh" > > #include "include/stat_msg.hh" > > #include "include/emc_nml.hh" > > #include <stat_msg.hh> > > #include <cmd_msg.hh> > > #include <nml.hh> > > #include "emc.hh" // EMC NML > > #include "include/emcglb.h" // EMC_NMLFILE, > TRAJ_MAX_VELOCITY, > > TOOL_TABLE_FILE > > #include "include/emccfg.h" // DEFAULT_TRAJ_MAX_VELOCITY > > #include "inifile.hh" // INIFILE > > > > Not understand how to initialize state_msg. > > > > thanks and good end of 2019 and new 2020 at all. > > > > bkt > > > > Il giorno gio 19 dic 2019 alle ore 17:54 N <nicklas.karlsso...@gmail.com > > > > ha scritto: > > > > > > just a guess. > > > > > > > > EMC_TASK_SET_STATE *state_msg; > > > > > > > > state_msg is a pointer, yet no memory allocated for it. > > > > > > > > state_msg->state = EMC_TASK_STATE_OFF; > > > > > > > > you try to write in a memory space that officially has no memory > > > assigned yet. > > > > > > > > ju > > > You are correct no memory assigned. Maybe no warning for using an > > > unitialized variable, if turned a warning would be issued for using > > > unitizialized variable. > > > > > > Memory may be allocated with malloc but unless function > > > emcCommandBuffer->write(...) store the pointer internally, copy data > > > internally is below might be a much better idea. If state_msg variable > is > > > not used further down or at least is not supposed the block will also > limit > > > life time of variable. > > > > > > { > > > EMC_TASK_SET_STATE state_msg; > > > > > > state_msg.state = EMC_TASK_STATE_OFF; > > > state_msg.serial_number = ++emcCommandSerialNumber; > > > emcCommandBuffer->write(&state_msg); > > > } > > > > > > > > > _______________________________________________ > > > Emc-developers mailing list > > > Emc-developers@lists.sourceforge.net > > > https://lists.sourceforge.net/lists/listinfo/emc-developers > > > > > > > _______________________________________________ > > Emc-developers mailing list > > Emc-developers@lists.sourceforge.net > > https://lists.sourceforge.net/lists/listinfo/emc-developers > > > -- > N <nicklas.karlsso...@gmail.com> > > > _______________________________________________ > Emc-developers mailing list > Emc-developers@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/emc-developers > _______________________________________________ Emc-developers mailing list Emc-developers@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/emc-developers