Hard fault at misaligned memcpy memset

we made some simple tests with STM32F100 Value Line Eval Board:

//------------------------------------------------------------------------------
// Variables
static unsigned char sDstBuf[1024]; // 1KiB
static unsigned char sSrcBuf[sizeof(sDstBuf)];

printf("Copying words from misaligned src to aligned dst buffer... ");
memset(sDstBuf, 0xcd, sizeof(sDstBuf));

with optimize Level 3, optimize for time this takes
120usec

with optimize Level 0
155usec

almost the same if memcpy is used:
memcpy(sDstBuf, (const void *)0xcd, sizeof(sDstBuf));

It runs into hard fault, if optimize Level >=1 and optimise for time is not set.

I think this is a compiler error..

We ran into this before with MDK 4.60, now we use 4.70A

Werner

Parents
  • Thank you for the interesting link to the discussion.

    But I must admit, after reading all this, I am still unsure, whether not perhaps better specify the compiler switch "--no_unaligned_access".

    Even in your answer, you said that the memcpy functions might be slower if I skip the "--no_unaligned_access".

    You did not further elaborate the problem with the "(int*)" usage? Is it difficult to give some basic code example for this?

Reply
  • Thank you for the interesting link to the discussion.

    But I must admit, after reading all this, I am still unsure, whether not perhaps better specify the compiler switch "--no_unaligned_access".

    Even in your answer, you said that the memcpy functions might be slower if I skip the "--no_unaligned_access".

    You did not further elaborate the problem with the "(int*)" usage? Is it difficult to give some basic code example for this?

Children
More questions in this forum