CodeVision AVR в вопросах и ответах
Re: CodeVision AVR в вопросах и ответах
[uquote="veso74",url="/forum/viewtopic.php?p=4623277#p4623277"]How to copy a char array in C?[/uquote]
Да причем тут это? Как копировать массив я знаю, вот же функцию привел. Проблема в то что если массив источник во флеше она не компилируется.
Да причем тут это? Как копировать массив я знаю, вот же функцию привел. Проблема в то что если массив источник во флеше она не компилируется.
-
veso74
- Поставщик валерьянки для Кота
- Сообщения: 1903
- Зарегистрирован: Сб май 05, 2012 20:24:52
- Откуда: KN34PC, Болгария
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
Дайте весь фрагмент кода.
Последний раз редактировалось veso74 Сб сен 07, 2024 19:04:38, всего редактировалось 1 раз.
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
Как описан массив во флэш? Ведь не просто char srr[]=’ 123’; а как-то иначе.
Как описан указатель функции, использующей эти строки? Совпадает ли его тип с типом массива?
Как описан указатель функции, использующей эти строки? Совпадает ли его тип с типом массива?
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Re: CodeVision AVR в вопросах и ответах
flash char q[]="stndtestwaitload hotPreHheadbodytail manRhotSelfRheadeltrect SsTNBKsNBKw endstopflowSPANNODSFREQTAD-PowHPowLDS0EDS1ECOLDNLOAnoPSscPC";
вот именно он, функцию копирования я привел, все типа разумеется соответствуют
если убрать модификатор flash все работает, но теряется весь смысл данной конструкции.
вот именно он, функцию копирования я привел, все типа разумеется соответствуют
если убрать модификатор flash все работает, но теряется весь смысл данной конструкции.
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
Функция, что вы привели, работает (ожидает на входе) указатель другого типа - на ОЗУ, а у вас надо на ФЛЭШ
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Re: CodeVision AVR в вопросах и ответах
Я таки это понимаю, как можно изменить что бы заработало?
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
Сравните типы указателя в параметре функции и массива. Указатель должен иметь тот же тип, что и массив. Т.е. до звездочки должно быть точно то же, что и до имени массива.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Re: CodeVision AVR в вопросах и ответах
В CV есть вообще указатели на флеш?
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
Если есть flash char, почему бы не быть flash char*?
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Re: CodeVision AVR в вопросах и ответах
[uquote="ARV",url="/forum/viewtopic.php?p=4623294#p4623294"]Если есть flash char, почему бы не быть flash char*?[/uquote]
Плохо быть глупым, вот я глупый, это печально.
Заработало!! Спасибо вам!!!
void copy (char *mas, flash char *mas1, char adr, char adr1, char size)
{
for (i=0; i<size; i++)
mas[adr+i]=mas1[adr1+i];
}
Плохо быть глупым, вот я глупый, это печально.
Заработало!! Спасибо вам!!!
void copy (char *mas, flash char *mas1, char adr, char adr1, char size)
{
for (i=0; i<size; i++)
mas[adr+i]=mas1[adr1+i];
}
- Serzh2000
- Опытный кот
- Сообщения: 867
- Зарегистрирован: Пт фев 27, 2015 12:00:53
- Откуда: Рязанская область
Re: CodeVision AVR в вопросах и ответах
где скачать библиотеку TM1637 для CodeVisionAVR
НИКАК НЕ МОГУ ПОДКЛЮЧИТЬ ДИСПЛЕЙ TM1637 к атмеге 8
НИКАК НЕ МОГУ ПОДКЛЮЧИТЬ ДИСПЛЕЙ TM1637 к атмеге 8
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
Там же управление обычным I2C. Какая библиотека для этого нужна ?Serzh2000 писал(а):скачать библиотеку TM1637
- >TEHb<
- Друг Кота
- Сообщения: 5723
- Зарегистрирован: Ср ноя 11, 2009 17:19:30
- Откуда: Воронеж
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
Не совсем. Там всё довольно через зад относительно нормального I2C. Но выкрутиться можно.
"Привет!" - соврал он.
- VNS
- Говорящий с текстолитом
- Сообщения: 1614
- Зарегистрирован: Пт дек 10, 2021 12:48:46
- Откуда: Тюмень
Re: CodeVision AVR в вопросах и ответах
[uquote="Serzh2000",url="/forum/viewtopic.php?p=4725356#p4725356"]НИКАК НЕ МОГУ ПОДКЛЮЧИТЬ ДИСПЛЕЙ TM1637 к атмеге 8[/uquote]
Если у вас готовый дисплей на данной микросхеме, то настоятельно рекомендую выпаять входные конденсаторы с выводов CLK и DIO. Так как они очень сильно "затягивают" уровни и тогда понадобится значительно увеличивать паузы… без конденсаторов I2С работает стабильно, без танцев с бубном.
Ну и в даташите всё о работе ТМ1637 подробно расписано (с примерами)…
Если у вас готовый дисплей на данной микросхеме, то настоятельно рекомендую выпаять входные конденсаторы с выводов CLK и DIO. Так как они очень сильно "затягивают" уровни и тогда понадобится значительно увеличивать паузы… без конденсаторов I2С работает стабильно, без танцев с бубном.
Ну и в даташите всё о работе ТМ1637 подробно расписано (с примерами)…
Re: CodeVision AVR в вопросах и ответах
Добрый вечер ! Помогите,пожалуйста, с компиляцией и получения hex файла из этого исходника
https://radiokot.ru/forum/viewtopic.php ... 84#p791584
https://radiokot.ru/forum/viewtopic.php ... 84#p791584
- Вложения
-
- rc5_1.c
- (8.11 КБ) 113 скачиваний
Re: CodeVision AVR в вопросах и ответах
Вот здесь нашел пример придачи и опрос codevision i2c pcf8574. оба примера работают. смог понять как работать с периферией типа i2c pcf8574 без библиотек.
-
codenamehawk
- Вымогатель припоя
- Сообщения: 527
- Зарегистрирован: Вт фев 09, 2010 17:52:26
Re: CodeVision AVR в вопросах и ответах
Этого недостаточно для получения рабочей прошивки.kotneko писал(а):Помогите,пожалуйста, с компиляцией и получения hex файла из этого исходника
Нужны все файлы проекта, в которых учитывается примненный процессор и код программы для него.
Создайте в CodeWizardAVR V1.25.9 новый проект для ATtiny2313, установите частоту проца 8,000000 MHz
В настройках подключите lcd модуль.
Скомпилируйте полученный проект.
Потом замените код на код из rc5_1.c, скомпилируйте и получите нех файл.
-
Alex_ka
- Нашел транзистор. Понюхал.
- Сообщения: 193
- Зарегистрирован: Ср сен 04, 2019 17:59:23
- Откуда: Гомель
Re: CodeVision AVR в вопросах и ответах
Мужики. Ваша помощь нужна. Что то у меня в железе не хочет в еепром писать и читать то что мне нужно. Программа ошибок не выдает. Даю кусок программы, подскажите пожалуйста, что не так делаю. Только прошу если можно конкретно, так как я не сталкивался с еепром. При первом запуске на портах 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; }
}
#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; }
}
Re: CodeVision AVR в вопросах и ответах
писать и читать в еепром... это целая процедура))
у меня нет 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

у меня нет 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
-
Alex_ka
- Нашел транзистор. Понюхал.
- Сообщения: 193
- Зарегистрирован: Ср сен 04, 2019 17:59:23
- Откуда: Гомель
Re: CodeVision AVR в вопросах и ответах
Спасибо. Завтра попробую. Примет ли такие команды CodeVision?