<div dir="ltr">
<div>I do the following, but still got error of "Bad address":</div><div>------------------------------<wbr>------------------------------<wbr>------------------------------<wbr>----</div><div>typedef struct {<br>    // inputs<br>    uint16_t slave_position;<br>    uint16_t sdo_index;<br>    uint8_t sdo_entry_subindex;<br>    size_t target_size;<br>    uint8_t *target;<br><br>    // outputs<br>    size_t data_size;<br>    uint32_t abort_code;<br>} ec_ioctl_slave_sdo_upload_t;</div><div><br></div><div>ec_ioctl_slave_sdo_upload_t data;<br><br>data.slave_position = 5;<br>data.sdo_index = 0xf880;<br>data.sdo_entry_subindex = 1;<br>data.target_size = 4;<br>        <br>ecrt_master_sdo_upload(master, data.slave_position, data.sdo_index, <br></div><div>                     data.sdo_entry_subindex, data.target, data.target_size, <br></div><div>                     &data.data_size, &data.abort_code);</div><div>------------------------------<wbr>------------------------------<wbr>------------------------------<wbr>----------</div><div><br></div><div>Thanks!</div>

<br><div class="gmail_extra"><br></div><div class="gmail_extra"><br></div><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Jun 20, 2018 at 8:02 PM, Gavin Lambert <span dir="ltr"><<a href="mailto:gavin.lambert@tomra.com" target="_blank">gavin.lambert@tomra.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">





<div link="blue" vlink="purple" lang="EN-NZ">
<div class="m_8649024872739368887WordSection1">
<p class="MsoNormal"><span>You are passing a garbage pointer as the abort_code.  This should be a pointer to a local variable that will receive the output value.  See the examples.<u></u><u></u></span></p>
<p class="MsoNormal"><span><u></u> <u></u></span></p>
<div style="border:none;border-left:solid blue 1.5pt;padding:0cm 0cm 0cm 4.0pt">
<div>
<div style="border:none;border-top:solid #e1e1e1 1.0pt;padding:3.0pt 0cm 0cm 0cm">
<p class="MsoNormal"><b><span lang="EN-US">From:</span></b><span lang="EN-US"> jerry itnet [mailto:<a href="mailto:jerry.itnet@gmail.com" target="_blank">jerry.itnet@gmail.com</a>]
<br>
<b>Sent:</b> Thursday, 21 June 2018 04:08<br>
<b>Subject:</b> Re: [etherlab-users] How to "upload/download" SDOs in application(*.c file)?<u></u><u></u></span></p>
</div>
</div><div><div class="h5">
<p class="MsoNormal"><u></u> <u></u></p>
<div>
<div>
<p class="MsoNormal">Hi, Gavin:<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">Thanks for your guide, now it can upload  SDO packet (seen with Wireshark).<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">But I got an error message on console:<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">               <b>  "Failed to execute SDO upload: Bad Address"</b><u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<div>
<p class="MsoNormal">------------------------------<wbr>- my code ------------------------------<wbr>------------------------------<wbr>---------
<u></u><u></u></p>
<p class="MsoNormal">...<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">        size_t *result_size;    uint8_t *target;    <u></u><u></u></p>
<p class="MsoNormal">        const uint8_t *data;    uint32_t *abort_code;<br>
  ecrt_master_sdo_upload(master, 5, 0xf880, 1, target, 4, result_size, abort_code );<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">...<u></u><u></u></p>
<p class="MsoNormal">  if (ecrt_master_activate(master))         return -1;
<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">  cycle_task();<u></u><u></u></p>
<p class="MsoNormal">...<u></u><u></u></p>
</div>
<p class="MsoNormal">------------------------------<wbr>------------------------------<wbr>------------------------------<wbr>---------------------------<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">What could be wrong?<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">Thanks again!<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">Jerry<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
<div>
<p class="MsoNormal">On Mon, Jun 18, 2018 at 7:25 PM, Gavin Lambert <<a href="mailto:gavin.lambert@tomra.com" target="_blank">gavin.lambert@tomra.com</a>> wrote:<u></u><u></u></p>
<blockquote style="border:none;border-left:solid #cccccc 1.0pt;padding:0cm 0cm 0cm 6.0pt;margin-left:4.8pt;margin-right:0cm">
<div>
<div>
<p class="MsoNormal">There are a few different kinds of API to do SDO transfers, depending on how and when you want to do them.  (But in short: no, that code is probably not correct.)<u></u><u></u></p>
<p class="MsoNormal"> <u></u><u></u></p>
<p class="MsoNormal">ecrt_master_sdo_download/<wbr>upload are blocking APIs; they are intended to be called before activating the master.  It is still possible to call them
<i>on a separate thread</i> while the master is active (though be aware that this will cause lock contention so is not recommended if you have a fast cycle time).  You
<b>must not</b> call it from your realtime thread.  These are intended for network discovery or other one-off or infrequent actions.<u></u><u></u></p>
<p class="MsoNormal"> <u></u><u></u></p>
<p class="MsoNormal">ecrt_slave_config_create_sdo_<wbr>request and the companion ecrt_sdo_request_* methods are intended for the case where you want to do transfers (either one-off or periodically) from
 the realtime thread while the master is active.  You create the request first (before activating the master) and then use the other methods to kick off a specific action and then poll it for completion from inside your realtime loop.  These are non-blocking.<u></u><u></u></p>
<p class="MsoNormal"> <u></u><u></u></p>
<p class="MsoNormal">ecrt_slave_config_sdo* is for slave configuration settings that need to be written to the slave each time it reboots.  You call these once before activating the master and then
 the master itself takes care of sending these on first configuration and also if the slave needs to be reconfigured for any reason (eg. network disruption, rebooting).<u></u><u></u></p>
<p class="MsoNormal"> <u></u><u></u></p>
<p class="MsoNormal">It's all explained in the documentation, the examples, and the header files themselves.<u></u><u></u></p>
<p class="MsoNormal"> <u></u><u></u></p>
<div style="border:none;border-left:solid blue 1.5pt;padding:0cm 0cm 0cm 4.0pt">
<div>
<div style="border:none;border-top:solid #e1e1e1 1.0pt;padding:3.0pt 0cm 0cm 0cm">
<p class="MsoNormal"><b><span lang="EN-US">From:</span></b><span lang="EN-US"> jerry itnet<br>
<b>Sent:</b> Tuesday, 19 June 2018 04:15<br>
<b>Subject:</b> [etherlab-users] How to "upload/download" SDOs in application(*.c file)?</span><u></u><u></u></p>
</div>
</div>
<div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
<div>
<div>
<p class="MsoNormal">I am confused on how to "upload/download" SDOs in an application.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">For example, am I correct by writing codes like:<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">------------- application.c ------------------------------<wbr>------------------------------<wbr>------------------------------<wbr>---------<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">....<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">  uint16_t sdo_index = 0xf880;        uint8_t sdo_subindex = 1;        uint32_t value = 0;<br>
  ecrt_slave_config_sdo32( sc, sdo_index, sdo_subindex, value);<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">  if (ecrt_master_activate(master))         return -1;<br>
    <br>
  size_t *result_size;    uint8_t *target;    const uint8_t *data;    uint32_t *abort_code;<br>
  ecrt_master_sdo_upload(master, 5, 0xf880, 1, target, 4, result_size, abort_code );<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">...<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">  cycle_task();<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">...<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">------------------------------<wbr>------------------------------<wbr>------------------------------<wbr>------------------------------<wbr>----------<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">Thank in advance for any hint!<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">Jerry<u></u><u></u></p>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</blockquote>
</div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
</div>
</div></div></div>
</div>
</div>

</blockquote></div><br></div></div>