CRC bis 8k Flash statt 16kb

OP #3860153
Lesenswert?
• ▲
▼
Ich möchte über 16kB Flash bei einem STM32F030F4 eine CRC laufen lassen. 
Bis 8kb gibt es keine Probleme.Das Problem: Sobald 8kB(<8192) 
überschritten werden, wird GPIOB->BRR|=GPIO_Pin_1; nicht mehr erreicht 
??? uV 5.10 ST-LinkV2
1
#define FLASH_BASE            ((uint32_t)0x08000000) /*!< FLASH base address in the alias region */
2

3
GPIOB->BSRR|=GPIO_Pin_1;
4
CRC_DeInit();
5
CRC_ResetDR();
6
uint32_t *pFLASH= (uint32_t *)FLASH_BASE;
7
test_CRC=CRC_CalcBlockCRC(pFLASH,8192);
8
GPIOB->BRR|=GPIO_Pin_1;
Gast #3860249
Lesenswert?
• ▲
▼
Martin W. schrieb:

> CRC_CalcBlockCRC() ist aus der std_Peripheral_Lib von ST :)


Es soll tatsächlich schon gelegentlich vorgekommen sein, daß in C-Libs 
Fehler waren...

Das mag für die C-Götzenanbeter und die Copy&Paste-Spasten völlig 
unmöglich scheinen, ist aber definitiv eine Tatsache.

Wie wäre es denn, wenn du einfach mal in die Funktion reindebuggst und 
schaust, was die bei 8k+1 anders macht als bei 8k?

Möglicherweise genügt es aber auch schon, einfach nur die Doku zur 
Funktion zu lesen. Vielleicht ist eine Beschränkung auf 8k ja sogar 
dokumentiert (wozu auch immer die nötig oder sinnvoll sein mag).
OP #3860268
Lesenswert?
• ▲
▼
Es wird die HW-CRC auf dem STM32F030F4 angesprochen. Eine Limitierung 
auf 8kB ist dort nicht vorhanden.
1
/**
2
  * @brief  Computes the 32-bit CRC of a given buffer of data word(32-bit).
3
  * @param  pBuffer: pointer to the buffer containing the data to be computed
4
  * @param  BufferLength: length of the buffer to be computed
5
  * @retval 32-bit CRC
6
  */
7
uint32_t CRC_CalcBlockCRC(uint32_t pBuffer[], uint32_t BufferLength)
8
{
9
  uint32_t index = 0;
10
  
11
  for(index = 0; index < BufferLength; index++)
12
  {
13
    CRC->DR = pBuffer[index];
14
  }
15
  return (CRC->DR);
16
}
Gast #3860287
Lesenswert?
• ▲
▼
Martin W. schrieb:
> Es wird die HW-CRC auf dem STM32F030F4 angesprochen. Eine Limitierung
> auf 8kB ist dort nicht vorhanden.
>
1
/**
2
>   * @brief  Computes the 32-bit CRC of a given buffer of data 
3
> word(32-bit).
4
>   * @param  pBuffer: pointer to the buffer containing the data to be 
5
> computed
6
>   * @param  BufferLength: length of the buffer to be computed
7
>   * @retval 32-bit CRC
8
>   */
9
> uint32_t CRC_CalcBlockCRC(uint32_t pBuffer[], uint32_t BufferLength)
10
> {
11
>   uint32_t index = 0;
12
> 
13
>   for(index = 0; index < BufferLength; index++)
14
>   {
15
>     CRC->DR = pBuffer[index];
16
>   }
17
>   return (CRC->DR);
18
> }
19
>

Was aber klar zu sehen ist, dass die Bufferlänge in Einheiten von 32bit 
angegeben wird.

test_CRC=CRC_CalcBlockCRC(pFLASH,8192/sizeof(uint32_t));
sollte funktionieren

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.