|
Разница CodeVision и WinAVR |
|
|
|
Jul 22 2006, 10:15
|
Частый гость
 
Группа: Свой
Сообщений: 83
Регистрация: 17-05-06
Пользователь №: 17 190

|
Гребаные идентификаторы.... Как просто было в CodeVision : PORTD.1=1; DDRD=1; Пытаюсь в WinAVR сделать - достал примерно следующий код: Код DDRD &= ~(_BV(PD2)); // Назначаем 2-ю линию порта D на вход PORTD |= (_BV(PD2)); // подключаем "подтягивающий" резистор Нельзя ли попроще как-нибудь? И еще вопрос - инициализирую АЦП - выдает беспорядочные хаотичные цифры. Понятно, что дело в том, что ловятся шумы. Вылечил резистором 4,7 кОм на питание. А как-нить программно нельзяли?
|
|
|
|
|
 |
Ответов
(15 - 29)
|
Jul 24 2006, 09:21
|
Местный
  
Группа: Участник
Сообщений: 270
Регистрация: 29-06-06
Пользователь №: 18 445

|
Цитата(vesago @ Jul 24 2006, 11:14)  PORTD &= (1<<blabla) С трудом представляю, где это может пригодиться. Попробуйте написать в том же духе строчку, сбрасывающую в ноль единственный бит.
|
|
|
|
|
Jul 24 2006, 09:37
|
Частый гость
 
Группа: Свой
Сообщений: 196
Регистрация: 19-07-06
Из: Москва
Пользователь №: 18 922

|
Цитата(vet @ Jul 24 2006, 13:05)  Serg79 Ручками совершенно необязательно; лично я использую определения битов, взятые из заголовочных файлов IAR. Порты всегда переопределяю в отдельном файле, а то после разводки можно потратить еще кучу времени, так как конструкторы любят их менять как им удобно (кроме портов зависимых от аппаратуры). Далее всегда пишу макросы типа: #define COMP_U_LOW COMPORATOR_U &= ~Bit(COMP_U); для удобства использования. Остальную регистры переопределяю для быстрого перехода на другой контролер.
--------------------
Тяжелое детство - 8-битные игрушки на 8-дюемовых дискетах
|
|
|
|
|
Jul 24 2006, 09:53
|
Тутэйшы
   
Группа: Свой
Сообщений: 708
Регистрация: 30-11-04
Пользователь №: 1 263

|
Цитата(pokos @ Jul 24 2006, 12:21)  Цитата(vesago @ Jul 24 2006, 11:14)  PORTD &= (1<<blabla)
С трудом представляю, где это может пригодиться. Попробуйте написать в том же духе строчку, сбрасывающую в ноль единственный бит. PORTD &= ~(1<<blabla); Код #define LED_DDR DDRD #define LED_PORT PORTD #define LED_PIN PIND #define LED 3 #define LED_ON LED_PORT |= (1<<LED) #define LED_OFF LED_PORT &= ~(1<<LED)
if(system.led_timer == 0) { if((LED_PIN & (1<<LED)) == 0) { LED_ON; } else { LED_OFF; }
system.led_timer = 0.1*(1000/SYSTEM_TICK); }
|
|
|
|
Guest_Serg79_*
|
Jul 24 2006, 10:01
|
Guests

|
Цитата(vet @ Jul 24 2006, 13:05)  Serg79 Ручками совершенно необязательно; лично я использую определения битов, взятые из заголовочных файлов IAR. Так и Я о том же, что в нормальных компиляторах (типа IAR или WinAVR) эти все флаги и т.п. прописанны в заголовочных файлах, а в CodeVisionAVR C Compiler этого нет, там все приходится ручками писать.
|
|
|
|
Guest_Serg79_*
|
Jul 24 2006, 11:55
|
Guests

|
Цитата(WHALE @ Jul 24 2006, 15:24)  дел на 5 минут,к тому-же я обычно свои библиотечные файлы исполь зую,где уже все определено. Все зависит от проекта, а то так и весь Datasheets придется в заголовочный файл заносить, а уж это будет, поверте мне, точно не 5 минут. Если не верите, можете попробовать. Я согласен, можно и ручками все заголовочные файлы переписать. Но зачем, когда в нормальных компиляторах это уже сделано. А CodeVisionAVR C Compiler пройденный этап. И Я к ниму уже врядли когда вернусь после WinAVR. Но это все, только мое личное мнение.
|
|
|
|
|
Jul 24 2006, 12:23
|
Частый гость
 
Группа: Свой
Сообщений: 196
Регистрация: 19-07-06
Из: Москва
Пользователь №: 18 922

|
Цитата(Serg79 @ Jul 24 2006, 15:55)  Цитата(WHALE @ Jul 24 2006, 15:24)  дел на 5 минут,к тому-же я обычно свои библиотечные файлы исполь зую,где уже все определено.
Все зависит от проекта, а то так и весь Datasheets придется в заголовочный файл заносить, а уж это будет, поверте мне, точно не 5 минут. Если не верите, можете попробовать. Я согласен, можно и ручками все заголовочные файлы переписать. Но зачем, когда в нормальных компиляторах это уже сделано. А CodeVisionAVR C Compiler пройденный этап. И Я к ниму уже врядли когда вернусь после WinAVR. Но это все, только мое личное мнение.  ИМХО: переписываешь порты исключительно для облегчения себе жизни. Инструкцию LED_OFF не надо комментировать в отличие от PORTD.1=1;. К томуже при смени портов будешь выискивать в проекте все эти PORTD.1=1;
--------------------
Тяжелое детство - 8-битные игрушки на 8-дюемовых дискетах
|
|
|
|
|
Jul 24 2006, 12:43
|
Местный
  
Группа: Участник
Сообщений: 270
Регистрация: 29-06-06
Пользователь №: 18 445

|
Цитата(vesago @ Jul 24 2006, 13:53)  PORTD &= ~(1<<blabla); Когда-то я придумал то же самое.... товарищи даже спрашивали, мол, зачем так сложно. Потом попробовал, во что превращают это разные компиляторы с разными опциями оптимизации. Интересно было!
|
|
|
|
|
Jul 24 2006, 12:57
|
Местный
  
Группа: Участник
Сообщений: 416
Регистрация: 18-04-06
Из: Челябинск
Пользователь №: 16 219

|
Цитата(pokos @ Jul 24 2006, 15:43)  Цитата(vesago @ Jul 24 2006, 13:53)  PORTD &= ~(1<<blabla); Когда-то я придумал то же самое.... товарищи даже спрашивали, мол, зачем так сложно. Потом попробовал, во что превращают это разные компиляторы с разными опциями оптимизации. Интересно было! И во что же?
|
|
|
|
|
Jul 24 2006, 13:07
|
Частый гость
 
Группа: Свой
Сообщений: 196
Регистрация: 19-07-06
Из: Москва
Пользователь №: 18 922

|
Цитата(pokos @ Jul 24 2006, 16:43)  Цитата(vesago @ Jul 24 2006, 13:53)  PORTD &= ~(1<<blabla); Когда-то я придумал то же самое.... товарищи даже спрашивали, мол, зачем так сложно. Потом попробовал, во что превращают это разные компиляторы с разными опциями оптимизации. Интересно было! Всегда считал, что битовые операции с портами в AVR компилятор преобразует в что-то типа: sbi DDRB,1
--------------------
Тяжелое детство - 8-битные игрушки на 8-дюемовых дискетах
|
|
|
|
|
Jul 24 2006, 13:14
|
Местный
  
Группа: Участник
Сообщений: 416
Регистрация: 18-04-06
Из: Челябинск
Пользователь №: 16 219

|
Цитата(Семён @ Jul 24 2006, 16:07)  Цитата(pokos @ Jul 24 2006, 16:43)  Цитата(vesago @ Jul 24 2006, 13:53)  PORTD &= ~(1<<blabla); Когда-то я придумал то же самое.... товарищи даже спрашивали, мол, зачем так сложно. Потом попробовал, во что превращают это разные компиляторы с разными опциями оптимизации. Интересно было! Всегда считал, что битовые операции с портами в AVR компилятор преобразует в что-то типа: sbi DDRB,1 А разве не так?
|
|
|
|
|
Jul 24 2006, 13:28
|
Частый гость
 
Группа: Свой
Сообщений: 196
Регистрация: 19-07-06
Из: Москва
Пользователь №: 18 922

|
Цитата(_Bill @ Jul 24 2006, 17:14)  Цитата(Семён @ Jul 24 2006, 16:07)  Цитата(pokos @ Jul 24 2006, 16:43)  Цитата(vesago @ Jul 24 2006, 13:53)  PORTD &= ~(1<<blabla); Когда-то я придумал то же самое.... товарищи даже спрашивали, мол, зачем так сложно. Потом попробовал, во что превращают это разные компиляторы с разными опциями оптимизации. Интересно было! Всегда считал, что битовые операции с портами в AVR компилятор преобразует в что-то типа: sbi DDRB,1 А разве не так? товарищ pokos утверждает что НЕТ. Кстати если у меня в проекте есть не используемая аппаратура их порты и регистры (если можно) стараюсь использовать в виде глобальных флагов. typedef struct SYSTEM { unsigned char data1:1; unsigned char data2:1; unsigned char data3:1; unsigned char data4:1; }SYSTEM; __no_init volatile SYSTEM system@0x40; значительно увеличивается скорость работы установки флага system.data1=1;, сброса флага и проверки флага.
--------------------
Тяжелое детство - 8-битные игрушки на 8-дюемовых дискетах
|
|
|
|
|
Jul 24 2006, 14:11
|
Местный
  
Группа: Участник
Сообщений: 270
Регистрация: 29-06-06
Пользователь №: 18 445

|
Цитата(Семён @ Jul 24 2006, 17:28)  товарищ pokos утверждает что НЕТ. Кстати, не утверждал, просто осадочек остался. И проверил в имеющихся ЦодеВижн и ИАР - нормально компилируют. Потом нашёл-таки проект, где чудеса. Дык, там опечатка - как раз PORTD &= (1<<blabla) вместо PORTD &= ~(1<<blabla); Так что, пардоньте, товарищи.
|
|
|
|
|
Jul 24 2006, 19:31
|

Участник

Группа: Участник
Сообщений: 31
Регистрация: 26-05-05
Из: Севастополь
Пользователь №: 5 391

|
Цитата(_Bill @ Jul 24 2006, 15:14)  Цитата(Семён @ Jul 24 2006, 16:07)  Цитата(pokos @ Jul 24 2006, 16:43)  Цитата(vesago @ Jul 24 2006, 13:53)  PORTD &= ~(1<<blabla); Когда-то я придумал то же самое.... товарищи даже спрашивали, мол, зачем так сложно. Потом попробовал, во что превращают это разные компиляторы с разными опциями оптимизации. Интересно было! Всегда считал, что битовые операции с портами в AVR компилятор преобразует в что-то типа: sbi DDRB,1 А разве не так? Если речь идет только о портах с адресом 0...0x1F (0x20...0x3F) то это так, но не забудем что к другим портам, с адресом 0x20...0x3F (0x40...0x5F) это не применимо, и компилятор всегда скомпилет чтото типа in r16, abc andi r16, ~(1<<bit_name) out abc, r16
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|