CodeVision AVR в вопросах и ответах
-
Vrungel
- Первый раз сказал Мяу!
- Сообщения: 21
- Зарегистрирован: Пт сен 07, 2007 22:13:42
- Откуда: Мариуполь
Re: CodeVision AVR в вопросах и ответах
А можно ли как-то "распаковать" бинарную библиотеку CV?
Чтобы подредактировать немного.
Чтобы подредактировать немного.
- ИС-пытатель
- Вымогатель припоя
- Сообщения: 577
- Зарегистрирован: Ср июн 19, 2013 08:10:48
- Откуда: Москва, СПб, Липецк, Рязань
Re: CodeVision AVR в вопросах и ответах
можно свою написать. Будет быстрей и под вашу конкретную задачу.
-
Shershnyov
- Первый раз сказал Мяу!
- Сообщения: 33
- Зарегистрирован: Чт фев 07, 2013 10:46:46
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
Решил собрать простенький проект в зависимости от времени поджигать светодиоды. (аля бинарные часы) Нашел мануал, симулирую в протеусе. И если светодиоды включать тушить у меня получается, то не могу подключить часы к меге, как только прописываю строку инициализации часов, все перестает работать. Подскажите что я не так делаю. Спасибо
- Вложения
-
- Watch.rar
- (38.92 КБ) 153 скачивания
- ibiza11
- Поставщик валерьянки для Кота
- Сообщения: 1900
- Зарегистрирован: Сб фев 21, 2009 13:11:40
- Откуда: Москва
Re: CodeVision AVR в вопросах и ответах
часть библиотек можно просто. часть не очень. http://we.easyelectronics.ru/Hoksmur/1- ... evers.htmlVrungel писал(а):А можно ли как-то "распаковать" бинарную библиотеку CV?
Чтобы подредактировать немного.
Ставим плюсы: )
Re: CodeVision AVR в вопросах и ответах
Добрый день уважаемые форумчане. Прошу подмоги в таком деле: уже некоторое время норовлю понять как реализовать действие с помощью МК, а именно— при подаче напряжения с частотой в 1 Гц на порт 1, должен сработать порт 2 (подать напряжение). После чего проверить порт 1 на наличие напряжения. Если его нет—подождать 2 секунды и убрать напряжение с порта 2. В противном случае продолжать подавать напряжение на порт 2.
Благодарю всех.
Благодарю всех.
- ИС-пытатель
- Вымогатель припоя
- Сообщения: 577
- Зарегистрирован: Ср июн 19, 2013 08:10:48
- Откуда: Москва, СПб, Липецк, Рязань
Re: CodeVision AVR в вопросах и ответах
в фигурные скобки заключите конструкцию - и сворачивайте
Re: CodeVision AVR в вопросах и ответах
Это я хотел сделать сворачивание для глобальных переменных что-то их до фига развилось.
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
А в отдельный файл вынести, не ? 
Re: CodeVision AVR в вопросах и ответах
Так и есть и всё равно много я там разделил на группы АЦП таймер и тд вот их и хочу свернуть что бы потом легко было найти куда добавить.
- ibiza11
- Поставщик валерьянки для Кота
- Сообщения: 1900
- Зарегистрирован: Сб фев 21, 2009 13:11:40
- Откуда: Москва
Re: CodeVision AVR в вопросах и ответах
заворачивайте в структуры
все равно к глобальным переменным компиль по указателю обращается. По времени никакого выигрыша.
Код: Выделить всё
typedef struct {
...
} ADC_DATA_T;
ADC_DATA_T ADC1, ADC2;Ставим плюсы: )
- shadivl
- Открыл глаза
- Сообщения: 76
- Зарегистрирован: Пт май 28, 2010 13:41:16
- Откуда: Мариинск, Томск
Re: CodeVision AVR в вопросах и ответах
При компиляции CVAVR выдаёт ошибку "Undefined symbol: __i2c_port". Тоже самое с __scl_bit и __sda_bit. Как её устранить?
P.S. Делаю браслет для измерения температуры тела и пульса. Все библиотеки - CVAVRовские, кроме ответственной за вывод инфы на экран (Flex LCD )
P.S. Делаю браслет для измерения температуры тела и пульса. Все библиотеки - CVAVRовские, кроме ответственной за вывод инфы на экран (Flex LCD )
- Вложения
-
- flex_lcd.c
- (5.26 КБ) 215 скачиваний
-
- ElectroBraslet.c
- (4 КБ) 185 скачиваний
- Pavel_1978
- Опытный кот
- Сообщения: 830
- Зарегистрирован: Пт ноя 16, 2007 11:21:37
Re: CodeVision AVR в вопросах и ответах
Дефайнами не заданы ноги I2C и соответственно порт
Код: Выделить всё
// I2C Bus functions
#asm
.equ __i2c_port=0x18 ;PORTB
.equ __sda_bit=0
.equ __scl_bit=1
#endasm
#include <i2c.h>
- shadivl
- Открыл глаза
- Сообщения: 76
- Зарегистрирован: Пт май 28, 2010 13:41:16
- Откуда: Мариинск, Томск
Re: CodeVision AVR в вопросах и ответах
И действительно. Сказывается неопытность
Спасибо
Спасибо
Re: CodeVision AVR в вопросах и ответах
Здравствуйте, меня интересует такой вопрос. После переполнения какой либо (глобальной локальной) переменной она сбросится в 0 или повлечёт за собой изменения по соседнему адресу ?
- Panda_Y2K
- Грызет канифоль
- Сообщения: 258
- Зарегистрирован: Пт сен 23, 2011 06:44:41
- Откуда: ЮФО
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
В ноль.
Тип данных определяет их размер - int 2 байта, char 1 байт и за пределы этих размеров переменная не вылезет.
Тип данных определяет их размер - int 2 байта, char 1 байт и за пределы этих размеров переменная не вылезет.
Купи два беляша и собери из них кошку
Labor est etiam ipse voluptas Труд уже сам по себе есть наслаждение (*Формула любви)
Ave novie-nostra ales Если один человек построил - другой завсегда разобрать может....(*Формула Любви).
Labor est etiam ipse voluptas Труд уже сам по себе есть наслаждение (*Формула любви)
Ave novie-nostra ales Если один человек построил - другой завсегда разобрать может....(*Формула Любви).
- pyzhman
- Друг Кота
- Сообщения: 7016
- Зарегистрирован: Вс июл 12, 2009 19:15:29
- Откуда: Ижевск
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
Код: Выделить всё
unsigned char a,b,c;
...
c= a + b;компилируется в
Код: Выделить всё
;c= a + b;
MOV R30,R2
ADD R30,R3
MOV R5,R30
Как видим, сброс в ноль не предусмотрен.
Docendo discimus
Re: CodeVision AVR в вопросах и ответах
Что-то я не сообразил что через симулятор проверить. Подумал что он ерунду покажет.
компилируется в
Так что в адрес пишется регистр значит другой адрес не как не заденет (не совсем понятно на кой он SUBI использует а не INC )
Для меня главное было убедится что при переполнении соседние переменные не пострадают а чему оно будет равно после переполнения это неважно всё равно я её сбрасываю при начале работы.
Так вот в процессе тестирования получил что код
компилируется в
где CALL 0x000019B8 это
Получается он всё что можно завернул в функцию. И этим увеличил выполнения кода в 3 раза хотя стоит максимальная оптимизация по скорости.
Можно ли его как-нибудь заставить не пихать всё в функции ? А то это не единственное место где он распихивает всё в функции.
У меня МК толстый флеша много меньше 30% использоваться будет.
Код: Выделить всё
volatile unsigned char test_inc;
...
test_inc++;Код: Выделить всё
102: test_inc++;
+00000FED: 91E00B94 LDS R30,0x0B94 Load direct from data space
+00000FEF: 5FEF SUBI R30,0xFF Subtract immediate
+00000FF0: 93E00B94 STS 0x0B94,R30 Store direct to data space
Так что в адрес пишется регистр значит другой адрес не как не заденет (не совсем понятно на кой он SUBI использует а не INC )
Для меня главное было убедится что при переполнении соседние переменные не пострадают а чему оно будет равно после переполнения это неважно всё равно я её сбрасываю при начале работы.
Так вот в процессе тестирования получил что код
Код: Выделить всё
test_inc++;
test_inc++;
test_inc++;компилируется в
Код: Выделить всё
102: test_inc++;
+00000FA2: 91E00B94 LDS R30,0x0B94 Load direct from data space
+00000FA4: 5FEF SUBI R30,0xFF Subtract immediate
+00000FA5: 93E00B94 STS 0x0B94,R30 Store direct to data space
105:
+00000FA7: 91E00000 LDS R30,0x0000 Load direct from data space
+00000FA9: 64E0 ORI R30,0x40 Logical OR with immediate
+00000FAA: 940E19B8 CALL 0x000019B8 Call subroutine
106:
+00000FAC: 61E0 ORI R30,0x10 Logical OR with immediate
+00000FAD: 940E19B8 CALL 0x000019B8 Call subroutine
где CALL 0x000019B8 это
Код: Выделить всё
+000019B8: 93E00500 STS 0x0500,R30 Store direct to data space
+000019BA: 9508 RET Subroutine return
Получается он всё что можно завернул в функцию. И этим увеличил выполнения кода в 3 раза хотя стоит максимальная оптимизация по скорости.
Можно ли его как-нибудь заставить не пихать всё в функции ? А то это не единственное место где он распихивает всё в функции.
У меня МК толстый флеша много меньше 30% использоваться будет.
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
а вы ерундой не майтесь.
в чем скрытый смысл тройного инкремента волатильной переменной? надо увеличить на 3, пишите сразу var += 3;
кроме того, вы на самом деле уверены, что переменная должна быть волатильной?
пытаться оптимизировать бессмысленный код - пустая трата времени. оптимизировать надо конкретные задачи, а не сферических коней.
в чем скрытый смысл тройного инкремента волатильной переменной? надо увеличить на 3, пишите сразу var += 3;
кроме того, вы на самом деле уверены, что переменная должна быть волатильной?
пытаться оптимизировать бессмысленный код - пустая трата времени. оптимизировать надо конкретные задачи, а не сферических коней.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Re: CodeVision AVR в вопросах и ответах
Я же написал что такая фигня происходила в других местах примеру вот тут было тоже самое.
используется так
Код: Выделить всё
union BitByte {
struct {
unsigned F_I42:1;
unsigned F_I28:1;
unsigned F_I1:1;
unsigned F_I2:1;
unsigned F_T1:1;
unsigned F_T2:1;
unsigned F_AC:1;
unsigned F_Pout:1;
} flag;
unsigned char byte;
};
union BitByte FLAG;используется так
Код: Выделить всё
FLAG.flag.F_AC=1;
FLAG.flag.F_T1=1;
FLAG.flag.F_I1=0;
FLAG.flag.F_I2=1;
FLAG.byte=0;