реклама на сайте
подробности

 
 
> Разница CodeVision и WinAVR
virtuality
сообщение Jul 22 2006, 10:15
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 83
Регистрация: 17-05-06
Пользователь №: 17 190



Гребаные идентификаторы....

Как просто было в CodeVision : PORTD.1=1; DDRD=1;
Пытаюсь в WinAVR сделать - достал примерно следующий код:

Код
  DDRD  &= ~(_BV(PD2));                            // Назначаем 2-ю линию порта D на вход
  PORTD |=  (_BV(PD2));                            // подключаем "подтягивающий" резистор


Нельзя ли попроще как-нибудь?


И еще вопрос - инициализирую АЦП - выдает беспорядочные хаотичные цифры. Понятно, что дело в том, что ловятся шумы. Вылечил резистором 4,7 кОм на питание. А как-нить программно нельзяли?
Go to the top of the page
 
+Quote Post
4 страниц V  « < 2 3 4  
Start new topic
Ответов (45 - 54)
pitt
сообщение Jul 26 2006, 14:04
Сообщение #46


Местный
***

Группа: Участник
Сообщений: 328
Регистрация: 1-06-06
Из: USA
Пользователь №: 17 672



Цитата(tiasur @ Jul 25 2006, 21:43) *
pitt, а какая у Вас версия?

WinAVR-20060421


--------------------
Прокричал немой глухому:"...Спасибо за внимание!"
http://www.youtube.com/watch?v=3Nnj4ky4Z_g
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jul 26 2006, 17:16
Сообщение #47


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



О! Может тут кто-нибудь скажет:
1) как заставить WinAVR не подлинковывать функции к которым никто не обращается? Бить исходный файл на десять (по файлу на функцию) и делать из них библиотеку не хочу - дурная работа и инкапсуляция страдает.
2) объявляю две функции (putstring, putstring_P) у одной аргумет - указатель на флеш, у второй - указатель на RAM. Еще не зная о тонкостях досупа к флеш в обоих написал putchar(*ptr++); и получил две функции с идентичным кодом (т.е. с LD вместо LPM во второй) _без_всяких_варнингов_. Это штатное поведение? Как же тогда отслеживать ошибки типа "забыл вытащить переменную через макрос"?


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
aesok
сообщение Jul 26 2006, 21:03
Сообщение #48


Знающий
****

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



Цитата(Сергей Борщ @ Jul 26 2006, 21:16) *
О! Может тут кто-нибудь скажет:
1) как заставить WinAVR не подлинковывать функции к которым никто не обращается? Бить исходный файл на десять (по файлу на функцию) и делать из них библиотеку не хочу - дурная работа и инкапсуляция страдает.


Первый вариант:
1. Добавить опции "-ffunction-sections -fdata-sections" компилятору.

2. Добавить опцию "-gc-sections" (обязательно до опций -l и -L) линкеру.

Но это будет работать ТОЛЬКО с binutils 2.17. binutils 2.16.1 удалит не только не используемые функции но и прерывания. Я не особо тестировал, но похоже "-fdata-sections" не работает.

С binutils 2.17 есть еще одна прблемма: AVRStudio (4.12) не загружает .elf файлы в которых нет .data сегмента. Тоесть должна быть как минимум одна глобальная инициализированная переменная.

Ждите новый релиз WinAVR или попробуйте взять компилятор отсюда: http://www.klen.org/Projects/Avr-gcc/avr-gcc_last_build.html

Второй вариант:
Опция компилятора -fwhole-program.

Но опять-же чтобы прерывания остались на месте придется постараться. Нужно добавить атрибут "used" в объявления функций прерываний. Подробнее здесь: http://savannah.nongnu.org/bugs/?func=deta...p;item_id=16411

Я это не тестировал.

Анатолий.

Сообщение отредактировал aesok - Jul 26 2006, 21:06
Go to the top of the page
 
+Quote Post
beer_warrior
сообщение Jul 26 2006, 21:53
Сообщение #49


Профессионал
*****

Группа: Свой
Сообщений: 1 065
Регистрация: 8-10-05
Из: Kiev, UA
Пользователь №: 9 380



Цитата
2) объявляю две функции (putstring, putstring_P) у одной аргумет - указатель на флеш, у второй - указатель на RAM. Еще не зная о тонкостях досупа к флеш в обоих написал putchar(*ptr++); и получил две функции с идентичным кодом (т.е. с LD вместо LPM во второй) _без_всяких_варнингов_. Это штатное поведение? Как же тогда отслеживать ошибки типа "забыл вытащить переменную через макрос"?

Как только в _объявлении_ присутсвует модификатор flash - сгенерится LPM. Проблемы будут, если попытаться одной и той же функцией обращаться и к RAM и к flash манипулируя аргументом.
Об этом надо просто постоянно помнить, хотя для простых манипуляций лучше пользоваться библиотечными функциями. Ну и еще не грех включить warning на максимальном уровне.


--------------------
Вони шукають те, чого нема,
Щоб довести, що його не існує.
Go to the top of the page
 
+Quote Post
pitt
сообщение Jul 26 2006, 23:01
Сообщение #50


Местный
***

Группа: Участник
Сообщений: 328
Регистрация: 1-06-06
Из: USA
Пользователь №: 17 672



Цитата(beer_warrior @ Jul 26 2006, 17:53) *
Как только в _объявлении_ присутсвует модификатор flash - сгенерится LPM. Ну и еще не грех включить warning на максимальном уровне.

По моему разумению модификатор flash это CVAVRина, а WinAVR ее не имеет, но может быть я ошибаюсь.
А вот выключать или оставлять warning(s) это ОЧЕНЬ большой грех.


--------------------
Прокричал немой глухому:"...Спасибо за внимание!"
http://www.youtube.com/watch?v=3Nnj4ky4Z_g
Go to the top of the page
 
+Quote Post
pitt
сообщение Jul 27 2006, 12:58
Сообщение #51


Местный
***

Группа: Участник
Сообщений: 328
Регистрация: 1-06-06
Из: USA
Пользователь №: 17 672



Цитата(beer_warrior @ Jul 26 2006, 17:53) *
Как только в _объявлении_ присутсвует модификатор flash - сгенерится LPM. Ну и еще не грех включить warning на максимальном уровне.

По моему разумению модификатор flash это CVAVRина, а WinAVR ее не имеет, но может быть я ошибаюсь.
А вот выключать или оставлять warning(s) это ОЧЕНЬ большой грех.


--------------------
Прокричал немой глухому:"...Спасибо за внимание!"
http://www.youtube.com/watch?v=3Nnj4ky4Z_g
Go to the top of the page
 
+Quote Post
pitt
сообщение Jul 27 2006, 13:21
Сообщение #52


Местный
***

Группа: Участник
Сообщений: 328
Регистрация: 1-06-06
Из: USA
Пользователь №: 17 672



Цитата(beer_warrior @ Jul 26 2006, 17:53) *
Как только в _объявлении_ присутсвует модификатор flash - сгенерится LPM. Ну и еще не грех включить warning на максимальном уровне.

По моему разумению модификатор flash это CVAVRина, а WinAVR ее не имеет, но может быть я ошибаюсь.
А вот выключать или оставлять warning(s) это ОЧЕНЬ большой грех.


--------------------
Прокричал немой глухому:"...Спасибо за внимание!"
http://www.youtube.com/watch?v=3Nnj4ky4Z_g
Go to the top of the page
 
+Quote Post
Seasonf
сообщение Aug 11 2006, 08:07
Сообщение #53





Группа: Новичок
Сообщений: 10
Регистрация: 7-08-06
Пользователь №: 19 378



Прошу прощения за глупый вопрос, но как заставить WinAVR сохранять стринговые постоянные в память программ, а не в еепром ?
Go to the top of the page
 
+Quote Post
pitt
сообщение Aug 11 2006, 11:15
Сообщение #54


Местный
***

Группа: Участник
Сообщений: 328
Регистрация: 1-06-06
Из: USA
Пользователь №: 17 672



Код
#include <avr/pgmspace.h>
...
char calib_fail[] PROGMEM = "\n\rCalibration has failed: reset and repeat!";


--------------------
Прокричал немой глухому:"...Спасибо за внимание!"
http://www.youtube.com/watch?v=3Nnj4ky4Z_g
Go to the top of the page
 
+Quote Post
Seasonf
сообщение Aug 11 2006, 12:34
Сообщение #55





Группа: Новичок
Сообщений: 10
Регистрация: 7-08-06
Пользователь №: 19 378



Или так:

#include <avr/pgmspace.h>
...
pro_char calib_fail[] = "\n\rCalibration has failed: reset and repeat!";

нашел в гуглях ссылку на этот хидер, а в хидере уже сам посмотрел :-)

Но всё равно спасибо !


Цитата(pitt @ Aug 11 2006, 14:15) *
Код
#include <avr/pgmspace.h>
...
char calib_fail[] PROGMEM = "\n\rCalibration has failed: reset and repeat!";



то есть
prog_char ...

в хидере переопределен тип специально
Go to the top of the page
 
+Quote Post

4 страниц V  « < 2 3 4
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 24th July 2025 - 08:54
Рейтинг@Mail.ru


Страница сгенерированна за 0.01474 секунд с 7
ELECTRONIX ©2004-2016