Официальный сайт компании Arduino по адресу arduino.cc
EEPROM, char* и int
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Пт, 01/07/2016 - 17:14
Добрый день.
Столкнулся с проблемой, на экран можно выводить только переменные типа char*, а записывать настройки в модуль часов только в int. написал программу с использованием itoa и atoi, все работает, туда-сюда конвертирует выводит и т.п. НО! почему-то с EEPROM это не работает.
#include <Wire.h> #include <Eeprom24C01_02.h> #define EEPROM_ADDRESS 0x50 static Eeprom24C01_02 eeprom(EEPROM_ADDRESS); char* Eprmcon[1]; void setup() { Serial.begin(9600); eeprom.initialize(); const byte address = 0; int Znach; Znach = int(eeprom.readByte(1)); delay(5); Serial.println(Znach); itoa(Znach, Eprmcon[0],10); Serial.println(itoa(Znach, Eprmcon[0],10)); } void loop() { }
Здесь пример кода без излишков. Считывание с микросхемы памяти проходит нормально (значение 179), а вот конвертация выдает что-то странное и зацикливает ардуино.
пример того, что видно в порте:
Пардон, забыл удалить const адресс, здесь она не используется.
У вас массив указателей на символы размерностью 1 создан, оно и глючит не по-детски. Надо бы создавать не массив указателей на символы, а массив символов - разницу ощущаете? Надо так:
Благодарю. Теперь разницу ощущаю. Когда я делал часы, там я действительно указывал массив. Поэтому-то оно и работало.
Здесь я так сделал, т.к. считал, что такая запись создаст массив из 7 строковых символов. Как массив целых чисел, там же допускается такая запись?
Здесь я так сделал, т.к. считал, что такая запись создаст массив из 7 строковых символов. Как массив целых чисел, там же допускается такая запись?
Разница между типом данных и указателем на тип данных - огромная. Сравните:
Более того, размерность указателя и размерность типа данных, на который он указывает - разная. Применительно к AVR размерность указателя - 2 байта, а указывать этот указатель может на структуру размером в 100 байт, например:
Закачайте этот код и посмотрите, что выдаёт в Serial.
помогите пожалусто с синтаксисом....
КОМПИЛЯТОР выдает ошибку , какието скобки просит а я не соображу никак..
вот как обьявлена у меня функция
что за скобки нужно добавить?
у тебя обьявление массива внутри цикла.
ооо реально не знал этого что нельзя в цыкле обьявлять массив ))
спасибо большое, теперь запомню....
вот так компилируется, осталось размер подровнять и все ок!
а так?
_alarm_int = strcat(
"alarm"
,
char
(i));
это в цикле
ооо реально не знал этого что нельзя в цыкле обьявлять массив ))
спасибо большое, теперь запомню....
можно. Дело не в том. что нельзя обьявлять, а в том. что вы этот массив неправильно инициализируете. о чем вам еомпилятор и пишет.
Вот так нельзя:
а вот так - можно (даже внутри цикла):
может и компилируется, но это неправильно. Работать не будет. В строке 9 вы присваиваете 11-ому элементу массива _alarm_int (в котором всего десять мест!) указатель на символ. Это бред.
Разберитесь наконец, как пользоваться строковыми массивами и не пишите чушь.
b707 мммм, спасибо за подсказку, перечитал по вашему совету статью, вот ссылка оставлю чтоб не потерялась http://rsdn.org/article/cpp/cstr.xml и переписал функцию, сделал вот так
вот и вывод ее
может конечно и можно сделать по другому.....
может конечно и можно сделать по другому.....
Конечно можно - в программировании все можно сделать несколькими способами. Но и ваш код уже вполне нормальный, мне за такой стыдно не было бы...