sd Karte am c8051f330 über SPI (Code Vorlage für f340)

Gast #2525011
Hallo Ihr Lieben,
ich habe meine Not mit der Anpassung eines Besispielcodes für ein 
c8051f340 an einem c8051f330.
Ich bin mittlerweile so weit dass ich sagen kann dass der SPI 
funktionieren müßte.
Beim Versuch das Ganze zu kompilieren bekommen ich folgenden Fehler 
angezeigt:
pointer: const to non-const assignment
und zwar an der von mir mit einem @ markierten Stelle
/* Write Sector(s) 
*/

#if _READONLY == 0
DRESULT disk_write (
  BYTE drv,      /* Physical drive nmuber (0..) */
  const BYTE *buff,  /* Data to be written */
  DWORD sector,    /* Sector address (LBA) */
  UINT count      /* Number of sectors to write  */
)
{
  if (drv || !count) return RES_PARERR;
  if (Stat & STA_NOINIT) return RES_NOTRDY;

  if (count == 1)/* Single block write */
  {
    @//
                if(!SD_writeSingleBlock (buff, sector)) count = 0;
                //@

  }
  else/* Multiple block write */
  {
    //@
                 if(!SD_writeMultipleBlock (buff, sector, count)) count 
= 0;
                //@
  }

  return count ? RES_ERROR : RES_OK;
}
#endif /* _READONLY */
Gast #2525022
1
/* Write Sector(s)
2
*/
3

4
#if _READONLY == 0
5
DRESULT disk_write (
6
  BYTE drv,      /* Physical drive nmuber (0..) */
7
  const BYTE *buff,  /* Data to be written */
8
  DWORD sector,    /* Sector address (LBA) */
9
  UINT count      /* Number of sectors to write  */
10
)
11
{
12
  if (drv || !count) return RES_PARERR;
13
  if (Stat & STA_NOINIT) return RES_NOTRDY;
14

15
  if (count == 1)/* Single block write */
16
  {
17
    @//
18
                if(!SD_writeSingleBlock (buff, sector)) count = 0;
19
                @//
20

21
  }
22
  else/* Multiple block write */
23
  {
24
    @//
25
                 if(!SD_writeMultipleBlock (buff, sector, count)) count
26
= 0;
27
                @//
28
  }
29

30
  return count ? RES_ERROR : RES_OK;
31
}
32
#endif /* _READONLY */
#2525026
Die Glaskugel sagt, dass die SD_Write*() Funktionen einen (BYTE *) 
erwarten, z.B:
1
 bit SD_writeSingleBlock (BYTE * buff, DWORD sector);

Du rufst die aber mit einem "const BYTE *" auf. Darüber wird der 
Compiler meckern.

Mögliche Abhilfe: Auch diese Funktionen mit "const BYTE *" deklarieren:
1
 bit SD_writeSingleBlock (const BYTE * buff, DWORD sector);
Gast #2525375
Vielen Dank erstmal für die schnelle Hilfe. Leider hat das nicht 
geklappt.
Daraufhin habe ich einfach das cont entfernt und hoffe dass das jetzt 
trotzdem noch geht. Allerdings sagt der Kompiler jetzt, dass er einen 
neuen Fehler gefunden hat und da bin ich gänzlich überfragt.
Dieser lautet:
Bad actual argument type
1
/*-----------------------------------------------------------------------*/
2
// Write Sector(s)                                                       */
3

4
#if _READONLY == 0
5

6
DRESULT disk_write (
7
  BYTE drv,      // Physical drive nmuber (0..) 
8
  BYTE *buff,          // Data to be written 
9
  DWORD sector,    // Sector address (LBA) 
10
  UINT count      // Number of sectors to write  
11
)
12

13
    {   _<---_  _UND_ _ZWAR_ _AN_ _DIESER_ _STELLE_
14
  if (drv || !count) return RES_PARERR;
15
  if (Stat & STA_NOINIT) return RES_NOTRDY;
16

17
  if (count == 1)         // Single block write 
18
        {  
19
    
20
            if(!SD_writeSingleBlock (buff, sector)) count = 0;
21
         // if(!SD_writeSingleBlock (const unsigned char * buff, sector)) count = 0;
22
    
23
        }
24
  
25
        else                    // Multiple block write 
26
        {              
27
    if(!SD_writeMultipleBlock (buff, sector, count)) count = 0;
28
          //if(!SD_writeMultipleBlock (const unsigned char * buff, sector, count)) count = 0;
29
     }
30

31
  return count ? RES_ERROR : RES_OK;
32
}
33
#endif              // _READONLY
#2579417
8051s-slave schrieb im Beitrag #2525375:
> if(!SD_writeSingleBlock (buff, sector)) count = 0;
>
>// if(!SD_writeSingleBlock (const unsigned char * buff, sector)) count = 0;

Beim Funktionsaufruf kommt natürlich kein Datentyp vor den Parameter. 
Die auskommentierte Zeile ist generell Murks.
Jetzt fehlt uns nur noch Deine Funktionsdeklaration von 
SD_writeSingleBlock() und der dazugehörige Funktionsprototyp.

unn tschuess
Bernhard

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 14 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.