1
0
Fork 0

Replace all memcpy/memset-like functions with standard <string.h> functions (#175)

* Use standard memcpy() instead of CO_memcpy()

* Remove CO_memcpy()

* Use standard memset() instead of CO_memset()

* Remove CO_memset()

* Move helper functions from CO_SDOserver.c to header and make them inline

* Implement CO_getUint16() with memcpy()

* Implement CO_getUint32() with memcpy()

* Implement CO_setUint16() with memcpy()

* Implement CO_setUint32() with memcpy()

* Define memcpy() as CO_memcpySwapX() for little-endian systems

* Fix several writes past the buffer due to hardcoded sizes

Use more "generic" sizes (via sizeof()) instead of hardcoded number in
all calls to memset() to avoid 1-byte errors which result in writes past
the buffer, for example:

memset(&LSSslave->TXbuff->data[5], 0, 4);
in CO_LSSslave_serviceInquire()

memset(&LSSmaster->TXbuff->data[6], 0, 3);
in CO_LSSmaster_switchStateSelectInitiate()

* Use "generic" size in calls to memcpy() where possible

* Remove CO_bytes_t

This type was used only for CO_{get,set}Uint{16,32}().
This commit is contained in:
Freddie Chopin 2020-05-04 11:22:32 +02:00 committed by GitHub
parent 5a2a1e85cf
commit 4c3011d34a
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
8 changed files with 106 additions and 189 deletions

View file

@ -24,6 +24,8 @@
*/
#include <string.h>
#include "301/CO_driver.h"
#include "301/CO_SDOserver.h"
#include "301/CO_Emergency.h"
@ -331,8 +333,8 @@ void CO_EM_process(
#endif
/* copy data to CAN emergency message */
CO_memcpy(emPr->CANtxBuff->data, em->bufReadPtr, 8U);
CO_memcpy((uint8_t*)&preDEF, em->bufReadPtr, 4U);
memcpy(emPr->CANtxBuff->data, em->bufReadPtr, sizeof(emPr->CANtxBuff->data));
memcpy(&preDEF, em->bufReadPtr, sizeof(preDEF));
em->bufReadPtr += 8;
/* Update read buffer pointer and reset inhibit timer */
@ -427,7 +429,7 @@ void CO_errorReport(CO_EM_t *em, const uint8_t errorBit, const uint16_t errorCod
/* copy data to the buffer, increment writePtr and verify buffer full */
CO_LOCK_EMCY();
CO_memcpy(em->bufWritePtr, &bufCopy[0], 8);
memcpy(em->bufWritePtr, bufCopy, sizeof(bufCopy));
em->bufWritePtr += 8;
if(em->bufWritePtr == em->bufEnd) em->bufWritePtr = em->buf;
@ -488,7 +490,7 @@ void CO_errorReset(CO_EM_t *em, const uint8_t errorBit, const uint32_t infoCode)
/* copy data to the buffer, increment writePtr and verify buffer full */
CO_LOCK_EMCY();
CO_memcpy(em->bufWritePtr, &bufCopy[0], 8);
memcpy(em->bufWritePtr, bufCopy, sizeof(bufCopy));
em->bufWritePtr += 8;
if(em->bufWritePtr == em->bufEnd) em->bufWritePtr = em->buf;

View file

@ -47,123 +47,6 @@
#endif
/* Helper functions. **********************************************************/
void CO_memcpy(uint8_t dest[], const uint8_t src[], const uint16_t size){
uint16_t i;
for(i = 0; i < size; i++){
dest[i] = src[i];
}
}
void CO_memset(uint8_t dest[], uint8_t c, const uint16_t size){
uint16_t i;
for(i = 0; i < size; i++){
dest[i] = c;
}
}
uint16_t CO_getUint16(const uint8_t data[]){
CO_bytes_t b;
b.u8[0] = data[0];
b.u8[1] = data[1];
return b.u16[0];
}
uint32_t CO_getUint32(const uint8_t data[]){
CO_bytes_t b;
b.u8[0] = data[0];
b.u8[1] = data[1];
b.u8[2] = data[2];
b.u8[3] = data[3];
return b.u32[0];
}
void CO_setUint16(uint8_t data[], const uint16_t value){
CO_bytes_t b;
b.u16[0] = value;
data[0] = b.u8[0];
data[1] = b.u8[1];
}
void CO_setUint32(uint8_t data[], const uint32_t value){
CO_bytes_t b;
b.u32[0] = value;
data[0] = b.u8[0];
data[1] = b.u8[1];
data[2] = b.u8[2];
data[3] = b.u8[3];
}
#ifdef CO_LITTLE_ENDIAN
void CO_memcpySwap2(void* dest, const void* src){
char *cdest;
char *csrc;
cdest = (char *) dest;
csrc = (char *) src;
cdest[0] = csrc[0];
cdest[1] = csrc[1];
}
void CO_memcpySwap4(void* dest, const void* src){
char *cdest;
char *csrc;
cdest = (char *) dest;
csrc = (char *) src;
cdest[0] = csrc[0];
cdest[1] = csrc[1];
cdest[2] = csrc[2];
cdest[3] = csrc[3];
}
void CO_memcpySwap8(void* dest, const void* src){
char *cdest;
char *csrc;
cdest = (char *) dest;
csrc = (char *) src;
cdest[0] = csrc[0];
cdest[1] = csrc[1];
cdest[2] = csrc[2];
cdest[3] = csrc[3];
cdest[4] = csrc[4];
cdest[5] = csrc[5];
cdest[6] = csrc[6];
cdest[7] = csrc[7];
}
#endif
#ifdef CO_BIG_ENDIAN
void CO_memcpySwap2(void* dest, const void* src){
char *cdest;
char *csrc;
cdest = (char *) dest;
csrc = (char *) src;
cdest[0] = csrc[1];
cdest[1] = csrc[0];
}
void CO_memcpySwap4(void* dest, const void* src){
char *cdest;
char *csrc;
cdest = (char *) dest;
csrc = (char *) src;
cdest[0] = csrc[3];
cdest[1] = csrc[2];
cdest[2] = csrc[1];
cdest[3] = csrc[0];
}
void CO_memcpySwap8(void* dest, const void* src){
char *cdest;
char *csrc;
cdest = (char *) dest;
csrc = (char *) src;
cdest[0] = csrc[7];
cdest[1] = csrc[6];
cdest[2] = csrc[5];
cdest[3] = csrc[4];
cdest[4] = csrc[3];
cdest[5] = csrc[2];
cdest[6] = csrc[1];
cdest[7] = csrc[0];
}
#endif
/*
* Read received message from CAN module.
*

View file

@ -27,6 +27,8 @@
#ifndef CO_SDO_SERVER_H
#define CO_SDO_SERVER_H
#include <string.h>
#ifdef __cplusplus
extern "C" {
#endif
@ -779,46 +781,17 @@ typedef struct{
}CO_SDO_t;
/**
* Helper union for manipulating data bytes.
*/
typedef union{
uint8_t u8[8]; /**< 8 bytes */
uint16_t u16[4]; /**< 4 words */
uint32_t u32[2]; /**< 2 double words */
}CO_bytes_t;
/**
* Helper function like memcpy.
*
* Function copies n data bytes from source to destination.
*
* @param dest Destination location.
* @param src Source location.
* @param size Number of data bytes to be copied (max 0xFFFF).
*/
void CO_memcpy(uint8_t dest[], const uint8_t src[], const uint16_t size);
/**
* Helper function like memset.
*
* Function fills destination with char "c".
*
* @param dest Destination location.
* @param c set value.
* @param size Number of data bytes to be copied (max 0xFFFF).
*/
void CO_memset(uint8_t dest[], uint8_t c, const uint16_t size);
/**
* Helper function returns uint16 from byte array.
*
* @param data Location of source data.
* @return Variable of type uint16_t.
*/
uint16_t CO_getUint16(const uint8_t data[]);
static inline uint16_t CO_getUint16(const uint8_t data[]){
uint16_t value;
memcpy(&value, data, sizeof(value));
return value;
}
/**
@ -827,7 +800,11 @@ uint16_t CO_getUint16(const uint8_t data[]);
* @param data Location of source data.
* @return Variable of type uint32_t.
*/
uint32_t CO_getUint32(const uint8_t data[]);
static inline uint32_t CO_getUint32(const uint8_t data[]){
uint32_t value;
memcpy(&value, data, sizeof(value));
return value;
}
/**
@ -836,7 +813,9 @@ uint32_t CO_getUint32(const uint8_t data[]);
* @param data Location of destination data.
* @param value Variable of type uint16_t to be written into data.
*/
void CO_setUint16(uint8_t data[], const uint16_t value);
static inline void CO_setUint16(uint8_t data[], const uint16_t value){
memcpy(data, &value, sizeof(value));
}
/**
@ -845,7 +824,9 @@ void CO_setUint16(uint8_t data[], const uint16_t value);
* @param data Location of destination data.
* @param value Variable of type uint32_t to be written into data.
*/
void CO_setUint32(uint8_t data[], const uint32_t value);
static inline void CO_setUint32(uint8_t data[], const uint32_t value){
memcpy(data, &value, sizeof(value));
}
/**
@ -855,7 +836,19 @@ void CO_setUint32(uint8_t data[], const uint32_t value);
* @param dest Destination location.
* @param src Source location.
*/
void CO_memcpySwap2(void* dest, const void* src);
#ifdef CO_LITTLE_ENDIAN
#define CO_memcpySwap2(dest, src) memcpy(dest, src, 2)
#endif
#ifdef CO_BIG_ENDIAN
static inline void CO_memcpySwap2(void* dest, const void* src){
char *cdest;
char *csrc;
cdest = (char *) dest;
csrc = (char *) src;
cdest[0] = csrc[1];
cdest[1] = csrc[0];
}
#endif
/**
@ -865,7 +858,21 @@ void CO_memcpySwap2(void* dest, const void* src);
* @param dest Destination location.
* @param src Source location.
*/
void CO_memcpySwap4(void* dest, const void* src);
#ifdef CO_LITTLE_ENDIAN
#define CO_memcpySwap4(dest, src) memcpy(dest, src, 4)
#endif
#ifdef CO_BIG_ENDIAN
static inline void CO_memcpySwap4(void* dest, const void* src){
char *cdest;
char *csrc;
cdest = (char *) dest;
csrc = (char *) src;
cdest[0] = csrc[3];
cdest[1] = csrc[2];
cdest[2] = csrc[1];
cdest[3] = csrc[0];
}
#endif
/**
@ -875,7 +882,25 @@ void CO_memcpySwap4(void* dest, const void* src);
* @param dest Destination location.
* @param src Source location.
*/
void CO_memcpySwap8(void* dest, const void* src);
#ifdef CO_LITTLE_ENDIAN
#define CO_memcpySwap8(dest, src) memcpy(dest, src, 8)
#endif
#ifdef CO_BIG_ENDIAN
static inline void CO_memcpySwap8(void* dest, const void* src){
char *cdest;
char *csrc;
cdest = (char *) dest;
csrc = (char *) src;
cdest[0] = csrc[7];
cdest[1] = csrc[6];
cdest[2] = csrc[5];
cdest[3] = csrc[4];
cdest[4] = csrc[3];
cdest[5] = csrc[2];
cdest[6] = csrc[1];
cdest[7] = csrc[0];
}
#endif
/**

View file

@ -23,6 +23,8 @@
* limitations under the License.
*/
#include <string.h>
#include "301/CO_driver.h"
#include "301/CO_SDOserver.h"
#include "301/CO_Emergency.h"
@ -47,7 +49,7 @@ static void CO_TIME_receive(void *object, void *msg){
if((operState == CO_NMT_OPERATIONAL) || (operState == CO_NMT_PRE_OPERATIONAL)){
// Process Time from msg buffer
CO_memcpy((uint8_t*)&TIME->Time.ullValue, data, DLC);
memcpy(&TIME->Time.ullValue, data, DLC);
CO_FLAG_SET(TIME->CANrxNew);
}
else{
@ -156,7 +158,7 @@ uint8_t CO_TIME_process(
if(TIME->timer >= TIME->periodTime){
TIME->timer = 0;
ret = 1;
CO_memcpy(TIME->TXbuff->data, (const uint8_t*)&TIME->Time.ullValue, TIME_MSG_LENGTH);
memcpy(TIME->TXbuff->data, &TIME->Time.ullValue, TIME_MSG_LENGTH);
CO_CANsend(TIME->CANdevTx, TIME->TXbuff);
}
}

View file

@ -24,6 +24,8 @@
* limitations under the License.
*/
#include <string.h>
#include "301/CO_driver.h"
#include "301/CO_SDOserver.h" /* for helper functions */
#include "305/CO_LSSmaster.h"
@ -151,7 +153,7 @@ CO_ReturnError_t CO_LSSmaster_init(
LSSmaster->command = CO_LSSmaster_COMMAND_WAITING;
LSSmaster->timeoutTimer = 0;
CO_FLAG_CLEAR(LSSmaster->CANrxNew);
CO_memset(LSSmaster->CANrxData, 0, sizeof(LSSmaster->CANrxData));
memset(LSSmaster->CANrxData, 0, sizeof(LSSmaster->CANrxData));
#if (CO_CONFIG_LSS_MST) & CO_CONFIG_FLAG_CALLBACK_PRE
LSSmaster->pFunctSignal = NULL;
LSSmaster->functSignalObject = NULL;
@ -227,7 +229,7 @@ static CO_LSSmaster_return_t CO_LSSmaster_switchStateSelectInitiate(
LSSmaster->timeoutTimer = 0;
CO_FLAG_CLEAR(LSSmaster->CANrxNew);
CO_memset(&LSSmaster->TXbuff->data[6], 0, 3);
memset(&LSSmaster->TXbuff->data[6], 0, sizeof(LSSmaster->TXbuff->data) - 6);
LSSmaster->TXbuff->data[0] = CO_LSS_SWITCH_STATE_SEL_VENDOR;
CO_setUint32(&LSSmaster->TXbuff->data[1], lssAddress->identity.vendorID);
CO_CANsend(LSSmaster->CANdevTx, LSSmaster->TXbuff);
@ -250,7 +252,7 @@ static CO_LSSmaster_return_t CO_LSSmaster_switchStateSelectInitiate(
CO_FLAG_CLEAR(LSSmaster->CANrxNew);
LSSmaster->TXbuff->data[0] = CO_LSS_SWITCH_STATE_GLOBAL;
LSSmaster->TXbuff->data[1] = CO_LSS_STATE_CONFIGURATION;
CO_memset(&LSSmaster->TXbuff->data[2], 0, 6);
memset(&LSSmaster->TXbuff->data[2], 0, sizeof(LSSmaster->TXbuff->data) - 2);
CO_CANsend(LSSmaster->CANdevTx, LSSmaster->TXbuff);
/* This is non-confirmed service! */
@ -343,7 +345,7 @@ CO_LSSmaster_return_t CO_LSSmaster_switchStateDeselect(
CO_FLAG_CLEAR(LSSmaster->CANrxNew);
LSSmaster->TXbuff->data[0] = CO_LSS_SWITCH_STATE_GLOBAL;
LSSmaster->TXbuff->data[1] = CO_LSS_STATE_WAITING;
CO_memset(&LSSmaster->TXbuff->data[2], 0, 6);
memset(&LSSmaster->TXbuff->data[2], 0, sizeof(LSSmaster->TXbuff->data) - 2);
CO_CANsend(LSSmaster->CANdevTx, LSSmaster->TXbuff);
/* This is non-confirmed service! */
@ -447,7 +449,7 @@ CO_LSSmaster_return_t CO_LSSmaster_configureBitTiming(
LSSmaster->TXbuff->data[0] = CO_LSS_CFG_BIT_TIMING;
LSSmaster->TXbuff->data[1] = 0;
LSSmaster->TXbuff->data[2] = bitTiming;
CO_memset(&LSSmaster->TXbuff->data[3], 0, 5);
memset(&LSSmaster->TXbuff->data[3], 0, sizeof(LSSmaster->TXbuff->data) - 3);
CO_CANsend(LSSmaster->CANdevTx, LSSmaster->TXbuff);
ret = CO_LSSmaster_WAIT_SLAVE;
@ -492,7 +494,7 @@ CO_LSSmaster_return_t CO_LSSmaster_configureNodeId(
CO_FLAG_CLEAR(LSSmaster->CANrxNew);
LSSmaster->TXbuff->data[0] = CO_LSS_CFG_NODE_ID;
LSSmaster->TXbuff->data[1] = nodeId;
CO_memset(&LSSmaster->TXbuff->data[2], 0, 6);
memset(&LSSmaster->TXbuff->data[2], 0, sizeof(LSSmaster->TXbuff->data) - 2);
CO_CANsend(LSSmaster->CANdevTx, LSSmaster->TXbuff);
ret = CO_LSSmaster_WAIT_SLAVE;
@ -532,7 +534,7 @@ CO_LSSmaster_return_t CO_LSSmaster_configureStore(
CO_FLAG_CLEAR(LSSmaster->CANrxNew);
LSSmaster->TXbuff->data[0] = CO_LSS_CFG_STORE;
CO_memset(&LSSmaster->TXbuff->data[1], 0, 7);
memset(&LSSmaster->TXbuff->data[1], 0, sizeof(LSSmaster->TXbuff->data) - 1);
CO_CANsend(LSSmaster->CANdevTx, LSSmaster->TXbuff);
ret = CO_LSSmaster_WAIT_SLAVE;
@ -571,7 +573,7 @@ CO_LSSmaster_return_t CO_LSSmaster_ActivateBit(
CO_FLAG_CLEAR(LSSmaster->CANrxNew);
LSSmaster->TXbuff->data[0] = CO_LSS_CFG_ACTIVATE_BIT_TIMING;
CO_setUint16(&LSSmaster->TXbuff->data[1], switchDelay_ms);
CO_memset(&LSSmaster->TXbuff->data[3], 0, 5);
memset(&LSSmaster->TXbuff->data[3], 0, sizeof(LSSmaster->TXbuff->data) - 3);
CO_CANsend(LSSmaster->CANdevTx, LSSmaster->TXbuff);
/* This is non-confirmed service! */
@ -590,7 +592,7 @@ static CO_LSSmaster_return_t CO_LSSmaster_inquireInitiate(
{
CO_FLAG_CLEAR(LSSmaster->CANrxNew);
LSSmaster->TXbuff->data[0] = cs;
CO_memset(&LSSmaster->TXbuff->data[1], 0, 7);
memset(&LSSmaster->TXbuff->data[1], 0, sizeof(LSSmaster->TXbuff->data) - 1);
CO_CANsend(LSSmaster->CANdevTx, LSSmaster->TXbuff);
return CO_LSSmaster_WAIT_SLAVE;
@ -1051,7 +1053,7 @@ CO_LSSmaster_return_t CO_LSSmaster_IdentifyFastscan(
case CO_LSSmaster_FS_STATE_CHECK:
ret = CO_LSSmaster_FsCheckWait(LSSmaster, timeDifference_us);
if (ret == CO_LSSmaster_SCAN_FINISHED) {
CO_memset((uint8_t*)&fastscan->found, 0, sizeof(fastscan->found));
memset(&fastscan->found, 0, sizeof(fastscan->found));
/* start scanning procedure by triggering vendor ID scan */
CO_LSSmaster_FsScanInitiate(LSSmaster, timeDifference_us,

View file

@ -24,6 +24,8 @@
* limitations under the License.
*/
#include <string.h>
#include "301/CO_driver.h"
#include "301/CO_SDOserver.h" /* for helper functions */
#include "305/CO_LSSslave.h"
@ -42,7 +44,7 @@ static void CO_LSSslave_serviceSwitchStateGlobal(
switch (mode) {
case CO_LSS_STATE_WAITING:
LSSslave->lssState = CO_LSS_STATE_WAITING;
CO_memset((uint8_t*)&LSSslave->lssSelect, 0, sizeof(LSSslave->lssSelect));
memset(&LSSslave->lssSelect, 0, sizeof(LSSslave->lssSelect));
break;
case CO_LSS_STATE_CONFIGURATION:
LSSslave->lssState = CO_LSS_STATE_CONFIGURATION;
@ -86,7 +88,7 @@ static void CO_LSSslave_serviceSwitchStateSelective(
/* send confirmation */
LSSslave->TXbuff->data[0] = CO_LSS_SWITCH_STATE_SEL;
CO_memset(&LSSslave->TXbuff->data[1], 0, 7);
memset(&LSSslave->TXbuff->data[1], 0, sizeof(LSSslave->TXbuff->data) - 1);
CO_CANsend(LSSslave->CANdevTx, LSSslave->TXbuff);
}
break;
@ -134,7 +136,7 @@ static void CO_LSSslave_serviceConfig(
LSSslave->TXbuff->data[0] = CO_LSS_CFG_NODE_ID;
LSSslave->TXbuff->data[1] = errorCode;
/* we do not use spec-error, always 0 */
CO_memset(&LSSslave->TXbuff->data[2], 0, 6);
memset(&LSSslave->TXbuff->data[2], 0, sizeof(LSSslave->TXbuff->data) - 2);
CO_CANsend(LSSslave->CANdevTx, LSSslave->TXbuff);
break;
case CO_LSS_CFG_BIT_TIMING:
@ -168,7 +170,7 @@ static void CO_LSSslave_serviceConfig(
LSSslave->TXbuff->data[0] = CO_LSS_CFG_BIT_TIMING;
LSSslave->TXbuff->data[1] = errorCode;
/* we do not use spec-error, always 0 */
CO_memset(&LSSslave->TXbuff->data[2], 0, 6);
memset(&LSSslave->TXbuff->data[2], 0, sizeof(LSSslave->TXbuff->data) - 2);
CO_CANsend(LSSslave->CANdevTx, LSSslave->TXbuff);
break;
case CO_LSS_CFG_ACTIVATE_BIT_TIMING:
@ -206,7 +208,7 @@ static void CO_LSSslave_serviceConfig(
LSSslave->TXbuff->data[0] = CO_LSS_CFG_STORE;
LSSslave->TXbuff->data[1] = errorCode;
/* we do not use spec-error, always 0 */
CO_memset(&LSSslave->TXbuff->data[2], 0, 6);
memset(&LSSslave->TXbuff->data[2], 0, sizeof(LSSslave->TXbuff->data) - 2);
CO_CANsend(LSSslave->CANdevTx, LSSslave->TXbuff);
break;
default:
@ -250,7 +252,7 @@ static void CO_LSSslave_serviceInquire(
/* send response */
LSSslave->TXbuff->data[0] = service;
CO_memcpySwap4(&LSSslave->TXbuff->data[1], &value);
CO_memset(&LSSslave->TXbuff->data[5], 0, 4);
memset(&LSSslave->TXbuff->data[5], 0, sizeof(LSSslave->TXbuff->data) - 5);
CO_CANsend(LSSslave->CANdevTx, LSSslave->TXbuff);
}
@ -300,8 +302,7 @@ static void CO_LSSslave_serviceIdent(
/* Confirm, Reset */
ack = true;
LSSslave->fastscanPos = CO_LSS_FASTSCAN_VENDOR_ID;
CO_memset((uint8_t*)&LSSslave->lssFastscan, 0,
sizeof(LSSslave->lssFastscan));
memset(&LSSslave->lssFastscan, 0, sizeof(LSSslave->lssFastscan));
}
else if (LSSslave->fastscanPos == lssSub) {
uint32_t mask = 0xFFFFFFFF << bitCheck;
@ -319,7 +320,7 @@ static void CO_LSSslave_serviceIdent(
}
if (ack) {
LSSslave->TXbuff->data[0] = CO_LSS_IDENT_SLAVE;
CO_memset(&LSSslave->TXbuff->data[1], 0, 7);
memset(&LSSslave->TXbuff->data[1], 0, sizeof(LSSslave->TXbuff->data) - 1);
CO_CANsend(LSSslave->CANdevTx, LSSslave->TXbuff);
}
}
@ -392,11 +393,11 @@ CO_ReturnError_t CO_LSSslave_init(
return CO_ERROR_ILLEGAL_ARGUMENT;
}
CO_memcpy((uint8_t*)&LSSslave->lssAddress, (uint8_t*)&lssAddress, sizeof(LSSslave->lssAddress));
memcpy(&LSSslave->lssAddress, &lssAddress, sizeof(LSSslave->lssAddress));
LSSslave->lssState = CO_LSS_STATE_WAITING;
CO_memset((uint8_t*)&LSSslave->lssSelect, 0, sizeof(LSSslave->lssSelect));
memset(&LSSslave->lssSelect, 0, sizeof(LSSslave->lssSelect));
CO_memset((uint8_t*)&LSSslave->lssFastscan, 0, sizeof(LSSslave->lssFastscan));
memset(&LSSslave->lssFastscan, 0, sizeof(LSSslave->lssFastscan));
LSSslave->fastscanPos = CO_LSS_FASTSCAN_VENDOR_ID;
LSSslave->pendingBitRate = pendingBitRate;

View file

@ -26,6 +26,8 @@
*/
#include <string.h>
#include "301/CO_driver.h"
#include "301/CO_SDOserver.h"
#include "301/CO_Emergency.h"
@ -49,7 +51,7 @@ static CO_SDO_abortCode_t CO_ODF_1010(CO_ODF_arg_t *ODF_arg){
if(!ODF_arg->reading){
/* don't change the old value */
CO_memcpy(ODF_arg->data, (const uint8_t*)ODF_arg->ODdataStorage, 4U);
memcpy(ODF_arg->data, ODF_arg->ODdataStorage, 4);
if(ODF_arg->subIndex == 1U){
if(value == 0x65766173UL){
@ -86,7 +88,7 @@ static CO_SDO_abortCode_t CO_ODF_1011(CO_ODF_arg_t *ODF_arg){
if(!ODF_arg->reading){
/* don't change the old value */
CO_memcpy(ODF_arg->data, (const uint8_t*)ODF_arg->ODdataStorage, 4U);
memcpy(ODF_arg->data, ODF_arg->ODdataStorage, 4);
if(ODF_arg->subIndex >= 1U){
if(value == 0x64616F6CUL){

View file

@ -49,7 +49,7 @@ CO_SDO_abortCode_t CO_ODF_1010(CO_ODF_arg_t *ODF_arg) {
if(!ODF_arg->reading) {
/* don't change the old value */
CO_memcpy(ODF_arg->data, (const uint8_t*)ODF_arg->ODdataStorage, 4U);
memcpy(ODF_arg->data, ODF_arg->ODdataStorage, 4);
if(ODF_arg->subIndex == 1) {
/* store parameters */
@ -79,7 +79,7 @@ CO_SDO_abortCode_t CO_ODF_1011(CO_ODF_arg_t *ODF_arg) {
if(!ODF_arg->reading) {
/* don't change the old value */
CO_memcpy(ODF_arg->data, (const uint8_t*)ODF_arg->ODdataStorage, 4U);
memcpy(ODF_arg->data, ODF_arg->ODdataStorage, 4);
if(ODF_arg->subIndex >= 1) {
/* restore default parameters */