how to avoid compilation error: expression must be a modifiable lvalue

4 visualizzazioni (ultimi 30 giorni)
Hi.
I met a compilation error with following code. a physical buffer (communication buffer of MCU) tossed to void* dest. if I change all argument to local variable and pointer compilation successful.
First I thought, polyspace doesn't understand typecasting of void to other, but I guess now when physical address is tossed as argument then it occur compilation error "expression must be a modifiable lvalue", since polyspace doesn't understand physical address.
Am i thinking correct? and does anybody can help me to avoid compilation error?
typedef unsigned char u08;
void* AL_MemCpy (void* dest, const void* source, u08 count)
{
while (count--)
{
*((u08*)dest)++ = *((u08*)source)++;
}
}
// used in other function like below
(void)AL_MEMCPY(RxBuffer,&(data[1]),(u08)RxMessage.Length);

Risposta accettata

Jan
Jan il 17 Gen 2013
Modificato: Jan il 17 Gen 2013
(u8 *) dest is a temporary variable, which cannot be increased. Perhaps you want this:
*((u08*)dest++) = *((u08*)source++);
But this copies the first byte only. Perhaps memcpy would be smarter?
Or:
u08 *d = (u08 *) dest, *s = (u08 *) source;
while (count--) {
*d++ = *s++;
}
  2 Commenti
James Tursa
James Tursa il 17 Gen 2013
Modificato: James Tursa il 17 Gen 2013
+1 is for the last option shown, which I prefer since it is clear what is being done and avoids trying to apply the ++ operator to a (void *) type (which inherently doesn't make sense and isn't allowed since void is of unknown size) using fancy-mangled syntax (e.g., the first option shown above will not compile).
Bong-Kee Choi
Bong-Kee Choi il 17 Gen 2013
Actually this code cause MISRA Rule violation also. Even though it can be work with some compiler (Codewarrior) but compatibility can't be guaranteed.
Thanks to all.

Accedi per commentare.

Più risposte (0)

Categorie

Scopri di più su C Shared Library Integration in Help Center e File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by