Страница 222 из 421
Re: CodeVision AVR в вопросах и ответах
Добавлено: Сб окт 06, 2012 21:02:27
vitalik_1984
Demon писал(а):Как в CVAVR произвести сдвиг с переносом (в ассемблере ROR и ROL)
я думаю это будет довольно сложная конструкция если просто на си делать.
Как то так
Код: Выделить всё
//сдвиг вправо с переносом.
if(number&0x01){(number>>1)|(0x80)}
else {number>>1;}
проверьте, код только что придумал.Проверить пока негде.
Demon писал(а):
как указать чтобы переменная помещалась в один из РОН
А оно вам надо?
Вообще ассемблер CVAVR позволяет напрямую поместить переменную РОН в точнее можно посмотреть в справке.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Ср окт 10, 2012 09:32:03
Volgol_555
Всем привет. Возникла проблема с Eeprom. Насколько я знаю, в CVavr для работы с eeprom достаточно любую переменную объявить так: eeprom int x; - и далее работать как с обычной переменной. В моей программе, есть таймер - прерывание по переполнению T0, где при нуле на ноге B0 у нас записываются несколько массивов в Eeprom. Эта ножка Atmega8 должна обнаружить пропажу питания ранее, чем МК выключиться (для этого после стабилизатора я ставлю кондер большой емкости, а перед стабилизатором через делитель завожу B.0). Как показывает Proteus данные вроде записываются...
В реальности при начальном старте Atmega8, когда в Eeprom на местах переменных должны храниться 0, почему-то значения FF, т.е. 255....
Когда программу компилирую...выдается hex и eep файлы, которые я заливаю в МК. Разве при этом в eeprom не должны появиться по определенным адресам 0???
Все что я пытаюсь сделать - записать в eeprom перед пропажей питания и потом снова считать при вкл. МК. Если мои действия не верны, то расскажите где ошибка...Вот необходимая часть исходника:

А вот проект:
Re: CodeVision AVR в вопросах и ответах
Добавлено: Ср окт 10, 2012 14:38:11
vitalik_1984
Насколько я понял как раз 0xFF всегда и есть начальное значение.Даже когда флеш читаешь пустую всегда это значение.
Для того, чтобы в нужной ячейке при первом запуске было нужное значение, необходимо написать
Код: Выделить всё
eeprom unsigned char ee_value=156;//где 156 это начальное значение
И потом залить это в еепром отдельной от заливки во флеш операцией.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Ср окт 10, 2012 14:57:42
Volgol_555
Ок. Я понял. Осталось пару тонкостей:
1) Я объявил переменную в eeprom но при объявлении не присвоил значений. Т.е. получается, к eeprom пока, что мы не обращаемся, но...при компиляции CVavr выдает файл *.eep с таким содержанием: :00000001FF -что это такое и нужно ли записывать в eeprom у Atmega8?
Re: CodeVision AVR в вопросах и ответах
Добавлено: Ср окт 10, 2012 15:04:06
ChipKiller
что это такое и нужно ли записывать в eeprom у Atmega8?
... это зависит от самой программы. Если в eeprom хранятся константы, то нет, а если eeprom изменяется в процессе работы, то очевидно да.....
Re: CodeVision AVR в вопросах и ответах
Добавлено: Ср окт 10, 2012 15:11:47
Volgol_555
ок. Спасибо) У меня там хранятся переменные)
Re: CodeVision AVR в вопросах и ответах
Добавлено: Ср окт 10, 2012 16:01:41
Volgol_555
Сегодня приступил к изучению AVR studio ver.4.15. Пошагово разобрался - все классно работает....только объясните мне вот такой момент: когда работаю с eeprom (в ходе программы) значения и записываются и читаются отлично. Но...почему-то AVRstudio показывает что в памяти SRAM у переменной значение 370 (при чтении) и 460(при записи), когда в Eeprom оно реальное и равно 33! И программа обрабатывает его как 33 (выполняется цикл при этом значении) .Откуда такие значения в SRAM появляются?
Re: CodeVision AVR в вопросах и ответах
Добавлено: Ср окт 10, 2012 21:07:23
vitalik_1984
Непонятно что вы имеете ввиду.вроде записываете в еепром, а значения смотрите в SRAM.Без кода не разобраться сразу.Может вы не соблюли знаковость или размерность и поэтому такие непонятки?К примеру если число двухбайтное, а читается только один байт из этого числа.
Какой хоть язык то?
Re: CodeVision AVR в вопросах и ответах
Добавлено: Чт окт 11, 2012 00:30:24
Volgol_555
Язык Си. Программа написана в CVavr...А на счет чтения в SRAM...помимо значений в eeprom, AVRstudio показывает эту же переменную в SRAM - мне не понятно это.. Завтра выкину весь проект, чтобы вы смогли увидеть все сами! Размерности я соблюдал...так думаю я)
Re: CodeVision AVR в вопросах и ответах
Добавлено: Чт окт 11, 2012 09:28:33
Volgol_555
Вот весь проект вместе с проектом в AVRstudio.
Также прикрепляю скрин для наглядности

Там четко видно, что переменная
status в SRAM равна 89, а в Eeprom значение 21 (в 16-м коде) или 33 (в 10с/с).
Re: CodeVision AVR в вопросах и ответах
Добавлено: Чт окт 11, 2012 16:12:22
vitalik_1984
Поразительно!Вы считаете, что можно вот так просто код из CVAVR поместить в студию и все заработает?Во первых в студии нет зарезервированного слова eeprom вместо него нужно использовать EEMEM это макрос, прописанный в заголовочном файле eemem.h
А прерывания у вас вообще работают?В студии совсем другое объявление прерываний.
Вообще для студии есть отдельная ветка.Нужен качественный перевод из версии CVAVR в версию для студии.
Вот тема про еепром в студии/винавр/GCC
Re: CodeVision AVR в вопросах и ответах
Добавлено: Чт окт 11, 2012 17:52:55
U235
vitalik_1984 писал(а):Поразительно!Вы считаете, что можно вот так просто код из CVAVR поместить в студию и все заработает?
Речь, видимо, идёт о использовании симулятора из студии для прогона прошивки, полученной в кодевижне.
И тут может проявиться особенность интерпретации адресов, заточенная под GCC. То есть студия считает, что всякая объявленная переменная располагается в ОЗУ. Такая вот версия.

Re: CodeVision AVR в вопросах и ответах
Добавлено: Чт окт 11, 2012 18:51:06
Volgol_555
Я не просто считаю, что можно проект из CVAvr поместить в студию, я знаю, что они заточены друг для друга под это!!! Avr studio прекрасно понимает написанное и перегоняет в свой файл, с которым работает!!! Прерывания отлично работают!! У меня все работает, за искл. того, на счет чего я поднял вопрос...просто я не знаю ещё всех примочек и как происходит обработка в памяти...вот и возник вопрос...
А на счет перегона - спасибо я изучу тонкости. Просто в CVavr есть встроенный Debbuger, который является файлом студии!
Re: CodeVision AVR в вопросах и ответах
Добавлено: Чт окт 11, 2012 21:32:52
Garin
Volgol_555 еще одна странность которая у тебя работает , путь к проекту прописан кирилицей, у меня такой номер чет не проходит...
Re: CodeVision AVR в вопросах и ответах
Добавлено: Чт окт 11, 2012 22:06:58
vitalik_1984
U235 писал(а):
Речь, видимо, идёт о использовании симулятора из студии для прогона прошивки, полученной в кодевижне.
О, так с этого и нужно было начинать
Сегодня приступил к изучению AVR studio ver.4.15.
Вот эта фраза меня видимо смутила. Забыл что симуляция Кода CV есть в студии
U235 писал(а):
То есть студия считает, что всякая объявленная переменная располагается в ОЗУ. Такая вот версия.

Чет я сомневаюсь в этом.Хоть может быть.
Я не просто считаю, что можно проект из CVAvr поместить в студию, я знаю, что они заточены друг для друга под это!!!
Я бы не так сказал, скорее CVAVR выпускает файл, который поддерживает студия.
А на счет перегона - спасибо я изучу тонкости. Просто в CVavr есть встроенный Debbuger, который является файлом студии!
Насчет перегона можно забыть, если собираетесь работать в CVAVR.А дебаггера как раз он не имеет встроенного, поэтому сделана функция перевода в студию.
путь к проекту прописан кирилицей, у меня такой номер чет не проходит...
Это кстати пунктик компилятора GCC/WINAVR насколько я понял.Студия нормально файлы открывает.И CVAVR тоже нормально туда компилирует.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Чт окт 11, 2012 23:39:12
Volgol_555
В общем вы все меня правильно поняли...Странно что проект написанный кириллицей не открывается.Кстати, сегодня проверил пробный проект в реальности - с Eeprom порядок. Т.е. студия, а точнее тот дебагер, не врал - все работает! Но почему все-таки при чтении Eeprom у нас в SRAM появляется странное значение я так и не понял.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Пн окт 15, 2012 15:56:37
audiserg
Всем привет. Дублирую пост с RU_radio_electr.
Началось все с того что решил прикрутить протопотоки для TINY2313, т.к. даже минимальная MRTOS жрет половину флеши.
В Си для микроконтроллеров полный 0 (когда то в институте писал в борланде), решил начать с CVavr т.к. есть обучалки по нему неплохие, правда с кучей рекламы, я думаю вы поняли(это к тому почему не GCC). Так вот протопотоки не заработали сразу, ругаясь на
PT_INIT(&pt) что разворачивается в (pt)->lc=0;
codevision требовал перед -> указатель на структуру. Решилось дело вводом доп переменной:
static struct pt pt1;
static struct pt *ptrs;
ptrs=&pt1
PT_INIT(ptrs);
Программка было зажужжала в протеусе, но после пары секунд работы вываливаются ворнинги. путем 3 часовых сексов выяснилось что :
(pt)->lc = 45
CVavr преобразует в:
1 LDD R26,Y+5
2 LDI R30,LOW(45)
3 LDI R31,HIGH(45)
4 ST X+,R30
5 ST X,R31
Оказалось что старший регистр r27 регистровой пары X , принимает значения в процессе предыдущих сложений long int где то в теле программы, а при загрузке адреса переменной(строка 1) грузиться только младший регистр а старший не грузиться,не очищается и соответственно в какой то момент в место адреса 88 попадаю на 188.
Теперь вопросы:
1.Можно ли что нибудь с этим сделать на CVavr что бы не переписывать всю библиотеку PROTOTHREADS , или забыть и уйти на студию с GCC пока не поздно? (оптимизации в настройках CV ставил разные, не помогает.) .
2. Может я первоначально испортил код, когда ввел переменную при инициализации?
3.Зачем строка 3 и 5 Если число 1 байт?????? Он мне так всю память сожрет гад.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Вт окт 16, 2012 18:00:26
a.garkin
Привет всем!
Дано версия 2.05
Как подключить lcd_rus?
Скопировал как обычно меняю в тестовом проекте alcd.h на lcd_rus.h и падает при компиляции?
Error: C:\Project\Termostat\DS18B20\ds18b20.c(55): can't open #include file: lcd_rus.h
Error: C:\Project\Termostat\DS18B20\ds18b20.c(77): undefined symbol 'lcd_init'
Error: C:\Project\Termostat\DS18B20\ds18b20.c(80): undefined symbol 'lcd_clear'
Error: C:\Project\Termostat\DS18B20\ds18b20.c(86): undefined symbol 'lcd_puts'
Error: C:\Project\Termostat\DS18B20\ds18b20.c(95): undefined symbol 'lcd_clear'
Error: C:\Project\Termostat\DS18B20\ds18b20.c(98): undefined symbol 'lcd_clear'
Error: C:\Project\Termostat\DS18B20\ds18b20.c(102): undefined symbol 'lcd_puts'
Error: C:\Project\Termostat\DS18B20\ds18b20.c(207): undefined symbol 'lcd_clear'
Error: C:\Project\Termostat\DS18B20\ds18b20.c(219): undefined symbol 'lcd_clear'
Re: CodeVision AVR в вопросах и ответах
Добавлено: Вт окт 16, 2012 18:07:37
a.garkin
a.garkin писал(а):Привет всем!
Дано версия 2.05
Как подключить lcd_rus?
Скопировал как обычно меняю в тестовом проекте alcd.h на lcd_rus.h и падает при компиляции?
error occurred during assembly
Error: C:\Project\Termostat\DS18B20\ds18b20.c(55): can't open #include file: lcd_rus.h
Error: C:\Project\Termostat\DS18B20\ds18b20.c(77): undefined symbol 'lcd_init'
Error: C:\Project\Termostat\DS18B20\ds18b20.c(80): undefined symbol 'lcd_clear'
Error: C:\Project\Termostat\DS18B20\ds18b20.c(86): undefined symbol 'lcd_puts'
Error: C:\Project\Termostat\DS18B20\ds18b20.c(95): undefined symbol 'lcd_clear'
Error: C:\Project\Termostat\DS18B20\ds18b20.c(98): undefined symbol 'lcd_clear'
Error: C:\Project\Termostat\DS18B20\ds18b20.c(102): undefined symbol 'lcd_puts'
Error: C:\Project\Termostat\DS18B20\ds18b20.c(207): undefined symbol 'lcd_clear'
Error: C:\Project\Termostat\DS18B20\ds18b20.c(219): undefined symbol 'lcd_clear'
Извиняюсь не туда скопировал... Теперь при правильном пути при компиляции в тестовом родном проекте DS18B20
При этой библиотеки валится:
Error: C:\Project\Termostat\DS18B20\list\DS18B20.asm(1643): Undefined symbol: __lcd_port
Error: C:\Project\Termostat\DS18B20\list\DS18B20.asm(1644): Undefined symbol: __lcd_port
Error: C:\Project\Termostat\DS18B20\list\DS18B20.asm(1663): Undefined symbol: __lcd_port
Error: C:\Project\Termostat\DS18B20\list\DS18B20.asm(1664): Undefined symbol: __lcd_port
Error: C:\Project\Termostat\DS18B20\list\DS18B20.asm(1667): Undefined symbol: __lcd_port
Error: C:\Project\Termostat\DS18B20\list\DS18B20.asm(1670): Undefined symbol: __lcd_port
Error: C:\Project\Termostat\DS18B20\list\DS18B20.asm(1672): Undefined symbol: __lcd_port
Error: C:\Project\Termostat\DS18B20\list\DS18B20.asm(1674): Undefined symbol: __lcd_port
Error: C:\Project\Termostat\DS18B20\list\DS18B20.asm(1681): Undefined symbol: __lcd_port
Error: C:\Project\Termostat\DS18B20\list\DS18B20.asm(1682): Undefined symbol: __lcd_port
Error: C:\Project\Termostat\DS18B20\list\DS18B20.asm(1684): Undefined symbol: __lcd_port
Error: C:\Project\Termostat\DS18B20\list\DS18B20.asm(1688): Undefined symbol: __lcd_port
Error: C:\Project\Termostat\DS18B20\list\DS18B20.asm(1692): Undefined symbol: __lcd_port
Error: C:\Project\Termostat\DS18B20\list\DS18B20.asm(1699): Undefined symbol: __lcd_port
Error: C:\Project\Termostat\DS18B20\list\DS18B20.asm(1702): Undefined symbol: __lcd_port
Error: C:\Project\Termostat\DS18B20\list\DS18B20.asm(1705): Undefined symbol: __lcd_port
Error: C:\Project\Termostat\DS18B20\list\DS18B20.asm(1714): Undefined symbol: __lcd_port
Error: C:\Project\Termostat\DS18B20\list\DS18B20.asm(1766): Undefined symbol: __lcd_port
Error: C:\Project\Termostat\DS18B20\list\DS18B20.asm(1828): Undefined symbol: __lcd_port
Error: C:\Project\Termostat\DS18B20\list\DS18B20.asm(1832): Undefined symbol: __lcd_port
Error: C:\Project\Termostat\DS18B20\list\DS18B20.asm(1836): Undefined symbol: __lcd_port
Error: C:\Project\Termostat\DS18B20\list\DS18B20.asm(1839): Undefined symbol: __lcd_port
Error: C:\Project\Termostat\DS18B20\list\DS18B20.asm(1840): Undefined symbol: __lcd_port
Error: C:\Project\Termostat\DS18B20\list\DS18B20.asm(1868): Undefined symbol: __lcd_port
В файле DS18B20.asm
Re: CodeVision AVR в вопросах и ответах
Добавлено: Вт окт 16, 2012 18:11:45
pyzhman
Prior to #include -ing the lcd.h file, you must declare which microcontroller port is used for communication with the LCD module.
The following LCD formats are supported in lcd.h: 1x8, 2x12, 3x12, 1x16, 2x16, 2x20, 4x20, 2x24 and 2x40 characters.
Example:
/* the LCD module is connected to PORTC */
#asm
.equ __lcd_port=0x15
#endasm
/* now you can include the LCD Functions */
#include <lcd.h>