Указатель на PROGMEM в функцию не работает(IDE 1.6.7)
- Войдите на сайт для отправки комментариев
Пт, 19/03/2021 - 19:29
Доброго дня
Компилирую проект сделанный для еще более старого IDE. Проект не компилируется с ошибкой error: invalid conversion from 'const AvcOutMessage*' to 'AvcOutMessage*' [-fpermissive]
Подправил код в библиотеке и в скетче, для начала сделал небольшой тест без библиотеки
код:
typedef enum { // No this is not a mistake, broadcast = 0! AVC_MSG_DIRECT = 1, AVC_MSG_BROADCAST = 0 } AvcTransmissionMode; #define ACT_NONE 0 // no action #define EV_NONE 0 // no event typedef struct { byte actionID; // Action id byte dataSize; // message size (bytes) byte data[20]; // message } AvcInMessageTable; typedef struct { byte actionID; // Action id byte dataSize; // message size (bytes) byte data[20]; // message word mask; // mask, set bit = 1 in not checked position (1<<5 or _BV(5) - datap[5] not checked) } AvcInMaskedMessageTable; typedef struct { AvcTransmissionMode broadcast; // Transmission mode: normal (1) or broadcast (0). byte dataSize; // message size (bytes) byte data[20]; // message } AvcOutMessage; AvcOutMessage const CmdPlayOk1_0 PROGMEM = {AVC_MSG_BROADCAST, 0x06, {0x45, 0x12, 0x50, 0x13, 0x04, 0x01}}; // Play begin message 1 AvcOutMessage const CmdStopOk2_0 PROGMEM = {AVC_MSG_BROADCAST, 0x0B, {0x45, 0x12, 0x51, 0x13, 0x04, 0x00}}; // Stop ok message 2 AvcOutMessage const CmdInit_01 PROGMEM = {AVC_MSG_BROADCAST, 0x05, {0x01, 0x11, 0x13, 0x24, 0x45}}; uint8_t message[50]; uint8_t slaveAddress, headAddress, dataSize; void setup() { SendMessage(&CmdStopOk2_0); } void loop() { } byte SendMessage ( const PROGMEM AvcOutMessage *msg){ LoadMessage(msg); return (0); } void LoadMessage(const PROGMEM AvcOutMessage *msg){ byte broadcast = pgm_read_byte_near(&msg->broadcast); //masterAddress = deviceAddress; if (broadcast == AVC_MSG_BROADCAST) slaveAddress = 0x01FF; else slaveAddress = headAddress; dataSize = pgm_read_byte_near( &msg->dataSize ); for (byte i = 0; i < dataSize; i++ ){ message[i] = pgm_read_byte_near( &msg->data[i] ); } };
Все замечательно откомпилировалось. Аналогично подправил код в библиотеке
byte AVCLanDrv::sendMessage ( const PROGMEM AvcOutMessage *msg){ loadMessage(msg); return sendMessage(); // Loads message data for given mesage ID. void AVCLanDrv::loadMessage(const PROGMEM AvcOutMessage *msg){ broadcast = pgm_read_byte_near(&msg->broadcast); masterAddress = deviceAddress; if (broadcast == AVC_MSG_BROADCAST) slaveAddress = 0x01FF; else slaveAddress = headAddress; dataSize = pgm_read_byte_near( &msg->dataSize ); for (byte i = 0; i < dataSize; i++ ){ message[i] = pgm_read_byte_near( &msg->data[i] ); } };
- опять та же ошибка.
В чем может быть дело?
Описание в классе:
В общем поменял в описаниях добавил const - помогло