динамический массив char#include <EEPROM2.h>

Maka
Offline
Зарегистрирован: 24.10.2015

Такой код антинаучен?

#include <EEPROM2.h>
char prtIn[] ={"12345"};
void Print (byte size, int adress) {
    char *prt = new char[size];
    EEPROM_read(adress, prt);
    Serial.print(prt);
    delete [] prt;
}
void setup() {
Serial.begin(9600);
EEPROM_write(0,prtIn);
Print (6, 0);
}
void loop() {
}

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Код не бывает антинаучным.

У Алескандра Зиновьева в "Зияющих высотах", герои как-то стали обсуждать, что некий текст признан "антиибанским". На что Болтун логически доказал, что антиибанских текстов не бывает и в принципе быть не может. Если интересно, можете ознакомиться с доказательством (поищите там по названию главы "Право и истолкование")

Так что код совсем не антинаучен.

Вы не написали что он, по-Вашему делает. Если Вы хотели записать туда 12345, а потом прочитать это оттуда, то таки нет. Данный код делает совсем не это :)

Maka
Offline
Зарегистрирован: 24.10.2015

ЕвгенийП пишет:

Код не бывает антинаучным.

У Алескандра Зиновьева в "Зияющих высотах", герои как-то стали обсуждать, что некий текст признан "антиибанским". На что Болтун логически доказал, что антиибанских текстов не бывает и в принципе быть не может. Если интересно, может ознакомиться с доказательством (поищите по названию главы "Право и истолкование")

Обязательно прочту, на первый взгляд круто.

А что посоветуете по поводу скетча? Задача - писать из еепрома разные строки разной длинны в массив желательно с помощью функции. Я это делаю сейчас в лупе, объявляя массив нужного размера, потом пишу в него из еепром массив char, потом печатаю массив. Работает, только много одинакового кода (различие только в длинне строки и адресе в еепром). Не пойму как в функции сначала объявить массив, а потом из параметра взять его размерность. Возможно ли это?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Maka пишет:

А что посоветуете по поводу скетча? Задача - писать из еепрома разные строки разной длинны в массив желательно с помощью функции. Я это делаю сейчас в лупе, объявляя массив нужного размера, потом пишу в него из еепром массив char, потом печатаю массив. Работает, только много одинакового кода (различие только в длинне строки и адресе в еепром). Не пойму как в функции сначала объявить массив, а потом из параметра взять его размерность. Возможно ли это?

Да, вот судя по Вашему коду, Вы не это делаете. Вы пишете функцией write (стр. 11), а читаете функцией read (стр. 5). Эти функции работают с ОДНИМ БАЙТОМ. Т.е. в строке 11 Вы пишете ОДИН бойт, а вовсе не строку, а в строке 5 Вы читаете ОДИН байт.

А массив  длины, передаваемой через параметр функции  - какие проблемы-то? Так "в лоб" и пишите:

void MyFunc(int n) {
	char szBuffer[n];	// Заводим массив длины n
	...
}

 

Maka
Offline
Зарегистрирован: 24.10.2015

Дык в библиотеке EEPROM2.h длинна читаемого массива определяется длинной массива в который я пишу. Или я не прав? скорей всего не прав потому что не работает. Вот кусок из скетча, он печатает правильно:


      if (!BuffMaskPrt) {
        char BuffMask[15];
        EEPROM_read(501, BuffMask);
        lcd.setCursor(3, 1);
        lcd.print(BuffMask);
        BuffMaskPrt = true;
      }

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Виноват, у Вас EEPROM_read, а мне привидилось EEPROM.read

Там надо смотреть что за макрос EEPROM_read. Скорее всего, да - не правы и длина определяется на этапе компиляции, но надо смотреть. У меня сейчас нет этой библиотеки, если выложите текст или ссылку, я посмотрю.

Maka
Offline
Зарегистрирован: 24.10.2015

Да, проблема была в библиотеке, сам бы мог додуматься раньше. Спасибо!