Чтобы подредактировать немного.
CodeVision AVR в вопросах и ответах
А можно ли как-то "распаковать" бинарную библиотеку CV?
Чтобы подредактировать немного.
Чтобы подредактировать немного.
- Реклама
можно свою написать. Будет быстрей и под вашу конкретную задачу.
- Сообщения: 33
- Зарегистрирован: Чт фев 07, 2013 10:46:46
Решил собрать простенький проект в зависимости от времени поджигать светодиоды. (аля бинарные часы) Нашел мануал, симулирую в протеусе. И если светодиоды включать тушить у меня получается, то не могу подключить часы к меге, как только прописываю строку инициализации часов, все перестает работать. Подскажите что я не так делаю. Спасибо
- Вложения
-
- Watch.rar
- (38.92 КБ) 154 скачивания
часть библиотек можно просто. часть не очень. http://we.easyelectronics.ru/Hoksmur/1- ... evers.htmlVrungel писал(а):А можно ли как-то "распаковать" бинарную библиотеку CV?
Чтобы подредактировать немного.
Ставим плюсы: )
- Сообщения: 1
- Зарегистрирован: Вт июн 03, 2014 20:24:07
Добрый день уважаемые форумчане. Прошу подмоги в таком деле: уже некоторое время норовлю понять как реализовать действие с помощью МК, а именно— при подаче напряжения с частотой в 1 Гц на порт 1, должен сработать порт 2 (подать напряжение). После чего проверить порт 1 на наличие напряжения. Если его нет—подождать 2 секунды и убрать напряжение с порта 2. В противном случае продолжать подавать напряжение на порт 2.
Благодарю всех.
Благодарю всех.
- Реклама
- Сообщения: 574
- Зарегистрирован: Вт ноя 02, 2010 17:46:37
Здравствуйте, можно ли заставить codevisionavr v2.05
Сворачивать
Сворачивать
Код: Выделить всё
#if 1
.....
#endif
- Сообщения: 574
- Зарегистрирован: Вт ноя 02, 2010 17:46:37
Это я хотел сделать сворачивание для глобальных переменных что-то их до фига развилось.
А в отдельный файл вынести, не ? 
- Сообщения: 574
- Зарегистрирован: Вт ноя 02, 2010 17:46:37
Так и есть и всё равно много я там разделил на группы АЦП таймер и тд вот их и хочу свернуть что бы потом легко было найти куда добавить.
заворачивайте в структуры
все равно к глобальным переменным компиль по указателю обращается. По времени никакого выигрыша.
Код: Выделить всё
typedef struct {
...
} ADC_DATA_T;
ADC_DATA_T ADC1, ADC2;Ставим плюсы: )
При компиляции CVAVR выдаёт ошибку "Undefined symbol: __i2c_port". Тоже самое с __scl_bit и __sda_bit. Как её устранить?
P.S. Делаю браслет для измерения температуры тела и пульса. Все библиотеки - CVAVRовские, кроме ответственной за вывод инфы на экран (Flex LCD )
P.S. Делаю браслет для измерения температуры тела и пульса. Все библиотеки - CVAVRовские, кроме ответственной за вывод инфы на экран (Flex LCD )
- Вложения
-
- flex_lcd.c
- (5.26 КБ) 216 скачиваний
-
- ElectroBraslet.c
- (4 КБ) 187 скачиваний
- Сообщения: 830
- Зарегистрирован: Пт ноя 16, 2007 11:21:37
Дефайнами не заданы ноги I2C и соответственно порт
Код: Выделить всё
// I2C Bus functions
#asm
.equ __i2c_port=0x18 ;PORTB
.equ __sda_bit=0
.equ __scl_bit=1
#endasm
#include <i2c.h>
- Сообщения: 574
- Зарегистрирован: Вт ноя 02, 2010 17:46:37
Здравствуйте, меня интересует такой вопрос. После переполнения какой либо (глобальной локальной) переменной она сбросится в 0 или повлечёт за собой изменения по соседнему адресу ?
В ноль.
Тип данных определяет их размер - 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 Если один человек построил - другой завсегда разобрать может....(*Формула Любви).
Код: Выделить всё
unsigned char a,b,c;
...
c= a + b;Код: Выделить всё
;c= a + b;
MOV R30,R2
ADD R30,R3
MOV R5,R30
Docendo discimus
- Сообщения: 574
- Зарегистрирован: Вт ноя 02, 2010 17:46:37
Что-то я не сообразил что через симулятор проверить. Подумал что он ерунду покажет.
компилируется в
Так что в адрес пишется регистр значит другой адрес не как не заденет (не совсем понятно на кой он 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
Для меня главное было убедится что при переполнении соседние переменные не пострадают а чему оно будет равно после переполнения это неважно всё равно я её сбрасываю при начале работы.
Так вот в процессе тестирования получил что код
Код: Выделить всё
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
Код: Выделить всё
+000019B8: 93E00500 STS 0x0500,R30 Store direct to data space
+000019BA: 9508 RET Subroutine return
Можно ли его как-нибудь заставить не пихать всё в функции ? А то это не единственное место где он распихивает всё в функции.
У меня МК толстый флеша много меньше 30% использоваться будет.
а вы ерундой не майтесь.
в чем скрытый смысл тройного инкремента волатильной переменной? надо увеличить на 3, пишите сразу var += 3;
кроме того, вы на самом деле уверены, что переменная должна быть волатильной?
пытаться оптимизировать бессмысленный код - пустая трата времени. оптимизировать надо конкретные задачи, а не сферических коней.
в чем скрытый смысл тройного инкремента волатильной переменной? надо увеличить на 3, пишите сразу var += 3;
кроме того, вы на самом деле уверены, что переменная должна быть волатильной?
пытаться оптимизировать бессмысленный код - пустая трата времени. оптимизировать надо конкретные задачи, а не сферических коней.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- Сообщения: 574
- Зарегистрирован: Вт ноя 02, 2010 17:46:37
Я же написал что такая фигня происходила в других местах примеру вот тут было тоже самое.
используется так
Код: Выделить всё
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;


