Как описан массив во флэш? Ведь не просто char srr[]=’ 123’; а как-то иначе. Как описан указатель функции, использующей эти строки? Совпадает ли его тип с типом массива?
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
flash char q[]="stndtestwaitload hotPreHheadbodytail manRhotSelfRheadeltrect SsTNBKsNBKw endstopflowSPANNODSFREQTAD-PowHPowLDS0EDS1ECOLDNLOAnoPSscPC"; вот именно он, функцию копирования я привел, все типа разумеется соответствуют если убрать модификатор flash все работает, но теряется весь смысл данной конструкции.
Сравните типы указателя в параметре функции и массива. Указатель должен иметь тот же тип, что и массив. Т.е. до звездочки должно быть точно то же, что и до имени массива.
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
НИКАК НЕ МОГУ ПОДКЛЮЧИТЬ ДИСПЛЕЙ TM1637 к атмеге 8
Если у вас готовый дисплей на данной микросхеме, то настоятельно рекомендую выпаять входные конденсаторы с выводов CLK и DIO. Так как они очень сильно "затягивают" уровни и тогда понадобится значительно увеличивать паузы… без конденсаторов I2С работает стабильно, без танцев с бубном.
Ну и в даташите всё о работе ТМ1637 подробно расписано (с примерами)…
Заголовок сообщения: Re: CodeVision AVR в вопросах и ответах
Добавлено: Пн сен 08, 2025 10:42:30
Родился
Зарегистрирован: Пн сен 08, 2025 10:32:47 Сообщений: 1
Рейтинг сообщения:0
Вот здесь нашел пример придачи и опрос codevision i2c pcf8574. оба примера работают. смог понять как работать с периферией типа i2c pcf8574 без библиотек.
Помогите,пожалуйста, с компиляцией и получения hex файла из этого исходника
Этого недостаточно для получения рабочей прошивки. Нужны все файлы проекта, в которых учитывается примненный процессор и код программы для него. Создайте в CodeWizardAVR V1.25.9 новый проект для ATtiny2313, установите частоту проца 8,000000 MHz В настройках подключите lcd модуль. Скомпилируйте полученный проект. Потом замените код на код из rc5_1.c, скомпилируйте и получите нех файл.
Мужики. Ваша помощь нужна. Что то у меня в железе не хочет в еепром писать и читать то что мне нужно. Программа ошибок не выдает. Даю кусок программы, подскажите пожалуйста, что не так делаю. Только прошу если можно конкретно, так как я не сталкивался с еепром. При первом запуске на портах D0 и D1 нули, но если на портах B есть определенное состояние, то я не могу занести значение c и d в еепром, а потом их правильно считать и выставить на портах D0 и D1 то состояние, которое зависило от портов В. Кусок программы даю. Да. При формировании файла прошивок, флешь нормальная, а еепром какой то кастрированный получается ( и программатор подвисает при записи еепром. и это на разных версиях 2.05,3.12, 3.14. #include <tiny2313a.h> #include <delay.h> int p; int c=0; int d=0; eeprom char c_eep; eeprom char d_eep; interrupt [TIM1_COMPA] void timer1_compa_isr(void) { TCNT1H=0; TCNT1L=0; p++; if(p>59) {p=0;} } void main(void) { c_eep=c; d_eep=d; #asm("sei") m1: PORTD.0=0; PORTD.1=0; delay_ms(1000); while (1) { if(PIND.5==0){delay_ms(1000);break; }; if(PIND.3==0){delay_ms(300);break; }; } p=0; delay_ms(100); c=c_eep; delay_ms(100); d=d_eep; delay_ms(100); PORTD.0=c; PORTD.1=d; while(1) { if(PINB.0 && !PINB.1 && !PINB.2 && !PINB.3) {c=0; d=0;c_eep=c; d_eep=d;delay_ms(2000);break;} if(!PINB.0 && PINB.1 && !PINB.2 && !PINB.3){c=0; d=1;c_eep=c; d_eep=d;delay_ms(2000);break;} if(PINB.0 && PINB.1 && !PINB.2 && !PINB.3) {c=1; d=0;c_eep=c; d_eep=d;delay_ms(2000);break;} if(!PINB.0 && !PINB.1 && PINB.2 && !PINB.3) {c=1; d=1;c_eep=c; d_eep=d;delay_ms(2000);break;} if(p==30){delay_ms(300);break;}; } delay_ms(1000); goto m1; } }
писать и читать в еепром... это целая процедура)) у меня нет tiny2313... есть мега... но принцип везде одинаковый.
/////////////////////////////////////////////// запись EEPROM: EEAR = x; // пишем адрес ячейки EEPROM в которую будем писать EEDR = a; // пишем данные в регистр EECR |= 0b00000100; // разрешаем запись в EEPROM EECR |= 0b00000010; // команда запись в EEPROM while(EECR & 0b00000010);// ждём окончания записи в EEPROM
/////////////////////////////////////////////// чтение EEPROM: EEAR = x; // пишем адрес ячейки EEPROM которую будем читать EECR |= 0b00000001; // команда читать EEPROM a = EEDR; // читаем данные из регистра
удобней делать в виде отдельной функции...
//////////////////////////////////////////////////////////////////////TX_EEPROM: void TX_EEPROM(void) { /////////////////////////////////////////////// запись EEPROM: EEAR = x; // пишем адрес ячейки EEPROM в которую будем писать EEDR = a; // пишем данные в регистр EECR |= 0b00000100; // разрешаем запись в EEPROM EECR |= 0b00000010; // команда запись в EEPROM while(EECR & 0b00000010);// ждём окончания записи в EEPROM }; ////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////RX_EEPROM: void RX_EEPROM(void) { /////////////////////////////////////////////// чтение EEPROM: EEAR = x; // пишем адрес ячейки EEPROM которую будем читать EECR |= 0b00000001; // команда читать EEPROM a = EEDR; // читаем данные из регистра }; ////////////////////////////////////////////////////////////////////////////////
теперь осталось только вызвать нужную функцию...
TX_EEPROM(); // запись EEPROM RX_EEPROM(); // чтение EEPROM
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 22
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения