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 */
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 */ |
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); |
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
|
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
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.