Заголовок сообщения: Re: CodeVision AVR в вопросах и ответах
Добавлено: Ср ноя 11, 2015 08:53:37
Мучитель микросхем
Карма: 4
Рейтинг сообщений: 15
Зарегистрирован: Ср янв 26, 2011 13:43:30 Сообщений: 414 Откуда: С того берега моря
Рейтинг сообщения:0
Все верно, внешнее прерывание при переходе через ноль - INT0. Попробую изменять тики таймера, после чего попробую завязать это все на кнопки UP-DOWN.. По сути это будет регулятор мощности на МК + Симистор, в нете как-то не густо примеров реализации... Особенно в CV.
_________________ - Бежит этот подлец-электрон, а вокруг его масса (аж 10 в 23й) штук ионов кремния и 10 в 15й ионов примеси и он, подлец, взаимодействует!
Добрый день! В интернете нашел что существуют уже аналог atmega128 (1887ВЕ7Т, 1887ВЕ8Т) непонятно код написанный для atmega128 нужно переделывать под аналог или нет? Приношу извинение за глупые вопросы.
Заголовок сообщения: Re: CodeVision AVR в вопросах и ответах
Добавлено: Ср ноя 11, 2015 15:24:30
Мучитель микросхем
Карма: 4
Рейтинг сообщений: 15
Зарегистрирован: Ср янв 26, 2011 13:43:30 Сообщений: 414 Откуда: С того берега моря
Рейтинг сообщения:0
Цитата:
Да, туда ему и дорога
Ну это ваше личное мнение....
_________________ - Бежит этот подлец-электрон, а вокруг его масса (аж 10 в 23й) штук ионов кремния и 10 в 15й ионов примеси и он, подлец, взаимодействует!
Добрый день! Подскажите есть код, работает все как надо, но иногда бывает сбой, программа перегрузится и начинает сначала. В чем причина в коде дела, может с таймером что-то, нужно его сбрасывать (не силен в этом) или из-за питания, микроконтроллер управляет двумя моторами мощными. Даже когда кнопка включена
Привет котам! Пытаюсь посчитать CRC структуры в EEPROME (мега 128, КодВижн 2.05.3) но не выходит взять указатель на структуру. Лебедева смотрел - не помогло. попробуйте кто нить у себя плз
Код:
typedef struct { float Pol_min; float Pol_max; float Stop; float Start; float Min; float Max; float correct_1; float correct_2; float correct_3; unsigned int u16_Bit_Cfg_2; unsigned int u16_Bit_Cfg_1; unsigned int u16_TimerValue; unsigned int u16_TempInterval; signed int i16_TempAlarm; unsigned char u8_Path_point_1; unsigned char u8_Path_point_2; unsigned char u8_TimeRoute; unsigned char u8_DTemper; unsigned char u8_Start_Speed; unsigned char u8_TimePOL;
}ConfStr;
eeprom ConfStr CfgDev;
eeprom ConfStr *pCfgDev; //int eeprom *CfgDev; //так тоже не работает, ошибка та же, когда пытаешься взять адрес структуры. pCfgDev = &CfgDev; //<<---матюкается на эту строку "Error: G:\111.c(23): '(' expected" //pCfgDev = &CfgDev.Pol_min; //и так не хочет работать
Только зачем вам для чтения памяти указатель на структуру ? Наверное, нужен указатель на char (или int, если CRC16). Тогда так :
Код:
ConfStr CfgDev; int* pCfgDev;
................. .................
pCfgDev = (int*)&CfgDev;
Да, хочу подсчитать CRC16 (код взят из вики) для расположенной в еепроме структуры. по вашему коду тоже не работает - ошибка та же, ругается на строку взятия адреса. Обновился до CV версии 3, думал поможет.
Код:
eeprom ConfStr CfgDev;// @0x10; int *pCfgDev; //int eeprom *pCfgDev; //с таким обьявлением тоже самое pCfgDev = (*int)&CfgDev; //---------- на эту строку и ругается. "Error: G:\Proekt\Proekts\crc16\111.c(24): '(' expected"
unsigned int Crc16(unsigned char *pcBlock, int len) { unsigned int crc = 0xFFFF; unsigned char i;
while (len--) { crc ^= *pcBlock++ << 8;
for (i = 0; i < 8; i++) crc = crc & 0x8000 ? (crc << 1) ^ 0x1021 : crc << 1; }
return crc; }
придется наверное держать эту структуру и в оперативке, что бы посчитать СRC
...Заработало вот так. Мой косяк, я пытался инициализировать указатель не в теле ф-ции майн (двоешник я )
подскажите плз еще по указателям...что то туго ко мне доходит
ф-ция CRC16 принимает char указатель, однако указатель на EEPROM int -овый, когда ставлю преобразование на входе в ф-цию при компилляции есть 3 предупреждения
Код:
unsigned int Crc16(unsigned char *pcBlock, int len) { unsigned int crc = 0xFFFF; unsigned char i;
while (len--) { crc ^= *pcBlock++ << 8; // здесь говорит что результат здвига будет 0 или переполнение "Warning: ......c(22): shift result will be 0" и "....CRC16.c(22): overflow is possible in 8 bit shift left, casting shifted operand to 'int' may be required"
for (i = 0; i < 8; i++) crc = crc & 0x8000 ? (crc << 1) ^ 0x1021 : crc << 1; }
return crc; }
unsigned int u16_CRC_CFG;
eeprom ConfStr CfgDev;// @0x10; ConfStr eeprom *pCfgDev; main {
pCfgDev = &CfgDev; //указ на ст-ру в еепроме, книги говорят что указ на еепром только 16 бит могут быть u16_CRC_CFG= Crc16((unsigned char*)pCfgDev, sizeof(CfgDev)); //здесь компилятору не нравиться преобразование "Warning: G:.......111.c: suspicious pointer conversion" }
думал заменить на 16 битные указатель pcBlock, но размер структуры равен 61 байт. как быть в таком случае?
1) crc ^= *pcBlock++ << 8; // здесь говорит что результат здвига будет 0 или переполнение Однозначно переполнение т.к. операнды 8-разрядные. Сделайте так: crc ^= ((uint16_t)*pcBlock++) << 8;
2)u16_CRC_CFG= Crc16((unsigned char*)pCfgDev, sizeof(CfgDev)); //здесь компилятору не нравиться Странно что не ошибка. Нельзя приводить тип указателя на другой сегмент памяти(не путать RAM-EEPROM).
Цитата:
думал заменить на 16 битные указатель pcBlock, но размер структуры равен 61 байт.
Указателю грубо говоря фиолетово на какой размер данных он указывает. В CVAVR его разрядность 16 бит, ни больше, ни меньше.
1) crc ^= *pcBlock++ << 8; // здесь говорит что результат здвига будет 0 или переполнение Однозначно переполнение т.к. операнды 8-разрядные. Сделайте так: crc ^= ((uint16_t)*pcBlock++) << 8;
2)u16_CRC_CFG= Crc16((unsigned char*)pCfgDev, sizeof(CfgDev)); //здесь компилятору не нравиться Странно что не ошибка. Нельзя приводить тип указателя на другой сегмент памяти(не путать RAM-EEPROM).
Цитата:
думал заменить на 16 битные указатель pcBlock, но размер структуры равен 61 байт.
Указателю грубо говоря фиолетово на какой размер данных он указывает. В CVAVR его разрядность 16 бит, ни больше, ни меньше.
не проходит ваш вариант, т.к. оперирование идет с 8 разр указателем, и CV ето не по душе как то. Пробовал и ставить интовые указатели в параметрах ф-ции со спецификатором eeprom, всеравно не идет. На сколько я понимаю нет состыковки указатель на структуру в еепром, сам указатель в озу и он 16 бит, а операции я пытаюсь проводить как с 8 битным указателем.... в общем я уже сам запутался окончательно. Спойлер
Заголовок сообщения: Re: CodeVision AVR в вопросах и ответах
Добавлено: Пн ноя 16, 2015 17:46:01
Модератор
Карма: 90
Рейтинг сообщений: 1443
Зарегистрирован: Чт мар 18, 2010 23:09:57 Сообщений: 4609 Откуда: Планета Земля
Рейтинг сообщения:0 Медали: 1
Мой Вам совет - откажитесь от этого дурацкого квалификатора. Он не стоит того, чтобы из-за него наживать такой геморрой. Создайте нормальные функции чтения/записи ЕЕПРОМ и работайте с ними.
Подскажите, пожалуйста, cvavr v3 не понимает, когда я записываю букву в кавычках в переменную char. Судя по обучалкам на ранних версиях он воспринимал это как ascii код. Может есть какая настройка в его компиляторе, или как-то по другому надо записать, чтоб он работал как мне надо?
... букву в кавычках в переменную char. Судя по обучалкам на ранних версиях он воспринимал это как ascii код.
Неизвестно, кто тут более матери ценен - обучалки или ЦВ - однако, лишний раз подтверждает, что ЦВ одинаково непригоден и 'пироги печь', и 'сапоги тачать'. В дополнение к вышепосоветованному, предложу такое:
Код:
char *s="Строка, мля.", c;
c = *s;
Иногда и так бывает полезно. Хотя, это не общий случай.
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения