Библиотека CVAVR EEPROM 24LC256 для записи: 2, 4 байт чисел?

Уборка сахарного тростника. Сезонная. Пайка кастрюль. Сдельная. Предложения работы.
Ответить
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18783
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

CAT86 писал(а):тоже не работает я писал, несколько постов с верху
а чего бы она работала? у вас функция пишет БАЙТ, а вы переменную типа INT ей суёте! функция честно пишет только младший байт этой переменной, который вы потом и читаете. значение 300 = 0x12C, вот она у вас 0x2C и пишет, а потом и читает. что и будет 44.

если ваша функция чтения/записи 1 байта работает правильно, то мои функции тоже будут правильно работать, т.к. они пишут/читают многобайтные значения при помощи вызова этих однобайтных функций.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Реклама
Открыл глаза
Сообщения: 68
Зарегистрирован: Пт ноя 11, 2016 09:17:49

Сообщение ELECTROS »

:shock: :facepalm: и всё в таком духе. Чувак хочет что то сделать, но азов еще не выучил.
Можно так

Код: Выделить всё

int M1_side_A=52;
if (mem==1){ 
   eeplc24_write(0, 0, M1_side_A);
   eeplc24_write(0, 1, M1_side_A>>8);
}

M1_side_A=eeplc24_read(0,0);
M1_side_A |= ((int)eeplc24_read(0,1))<<8;
Или покороче, вам обернули выше эти же функции в более простую форму:

Код: Выделить всё

nt M1_side_A=52;
if (mem==1){ 
   eeplc24_write_block(&M1_side_A, 0, sizeof(M1_side_A));
}
eeplc24_read_block(&M1_side_A, 0,  sizeof(M1_side_A));
sizeof(M1_side_A) = 2 в данном случае, но на некоторых архитектурах это не так и там вообще нужно по другому организовывать работу с такой памятью.
Пы сы: не забывайте что нужно еще контролировать адреса раз у вас размерность переменных разная планируются (чтоб адреса не налазили друг на друга). Лучше в структуру переменные объединяйте которые будут записываться в память.
Последний раз редактировалось ELECTROS Сб май 09, 2020 17:01:53, всего редактировалось 1 раз.
Реклама
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18783
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

ELECTROS писал(а):Или покороче
и пример я уже приводил, только вместо int в примере использовал float
ELECTROS писал(а):но на некоторых архитектурах это не так и там вообще нужно по другому организовывать работу с такой памятью.
с чего вдруг? для переменных "простых" типов приведенные мной функции отлично будут работать на любой архитектуре.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Открыл глаза
Сообщения: 68
Зарегистрирован: Пт ноя 11, 2016 09:17:49

Сообщение ELECTROS »

ARV, хм я допустим работаю с С2000 ядром, там минимальный размер 16 бит, и даже если объявить char он всё равно будет занимать 16 бит, хоть и средствами среды разработки и будет обрезаться до символа (ну поняли: char, int, short это всё 16 бит, так вот там sizeof() у всех этих типов равен 1), и вот там чтобы работать с внешней памятью которая 8-ми битовая, такие функции не прокатят, нужно специально выделять старшую и младшую части по каждому адресу (будет работать в частности в таком случае - использование псевдо char , но смысл его использовать в такой архитектуре только в случае организации ввода/вывода символов по какому нить интерфейсу, никак не для хранения данных).
Последний раз редактировалось ELECTROS Сб май 09, 2020 17:08:00, всего редактировалось 1 раз.
Реклама
Эиком - электронные компоненты и радиодетали
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18783
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

ELECTROS писал(а):sizeof() у всех этих типов равен 1
я не считаю себ суперзнатоком Си, но вроде как во всех букварях написано, что sizeof всегда возвращает количество БАЙТОВ и служит именно для обеспечения "количественной" мультиплатформенности...

Добавлено after 7 minutes 47 seconds:
Re: Библиотека CVAVR EEPROM 24LC256 для записи: 2, 4 байт чисел?
ладно, погуглил я... выяснил, что ошибался.
тупость, конечно, но и на самом деле если char 2 байта, то sizeof(char) == 1
но есть CHAR_BIT, с помощью которого можно проблему решить
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Реклама
Открыл глаза
Сообщения: 68
Зарегистрирован: Пт ноя 11, 2016 09:17:49

Сообщение ELECTROS »

[uquote="ARV",url="/forum/viewtopic.php?p=3839293#p3839293"]
ELECTROS писал(а):sizeof() у всех этих типов равен 1
я не считаю себ суперзнатоком Си, но вроде как во всех букварях написано, что sizeof всегда возвращает количество БАЙТОВ и служит именно для обеспечения "количественной" мультиплатформенности...[/uquote]
sizeof это оператор который определяет сколько минимальных единиц памяти занимает переменная что в скобках. А насчёт БАЙТА я вам написал, в моём случае БАЙТ равен не 8, а 16 бит. Си тут не причём, дело тут именно в единице измерения памяти в конкретной архитектуре.
В AVR, да и наверное в большинстве МК минимальная единица памяти 8 бит, но есть и исключения.
Реклама
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18783
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

ELECTROS писал(а):БАЙТ равен не 8, а 16 бит
очередь за нобелевкой уже заняли?
байт всегда 8 бит, а на вашей платформе 16 бит это char.
минимальная единица не обязательно байт, хотя байт может быть минимальной единицей :)
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Открыл глаза
Сообщения: 68
Зарегистрирован: Пт ноя 11, 2016 09:17:49

Сообщение ELECTROS »

[uquote="ARV",url="/forum/viewtopic.php?p=3839306#p3839306"]
ELECTROS писал(а):БАЙТ равен не 8, а 16 бит
очередь за нобелевкой уже заняли?
байт всегда 8 бит, а на вашей платформе 16 бит это char.[/uquote]
Извеняюсь увлёкся чё то:), конечно char. В общем поняли о чём я. Если интересно в частности про DSC (с такой архитектурой), о чём я писал: http://www.ti.com/product/TMS320F28335

[uquote="ARV",url="/forum/viewtopic.php?p=3839293#p3839293"]но есть CHAR_BIT, с помощью которого можно проблему решить[/uquote]
Я структуры и объединения юзаю, поудобней макросов будет в этом случае.
Первый раз сказал Мяу!
Сообщения: 25
Зарегистрирован: Ср дек 05, 2018 23:10:34

Сообщение CAT86 »

АЛЛИЛУ́ЙЯ!!! :)) я вас замучал... Работает как часики. ОГРОМНОЕ СПАСИБО :beer: ARV ELECTROS как мне вас отблагодарить?
Ответить

Вернуться в «Есть работа»