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

 
 
3 страниц V  < 1 2 3  
Reply to this topicStart new topic
> WinAVR - как оно?, Эффективность компилятора
klen
сообщение Jun 2 2006, 05:38
Сообщение #31


бессмертным стать можно тремя способами
*****

Группа: Свой
Сообщений: 1 405
Регистрация: 9-05-06
Из: Москва
Пользователь №: 16 912



Цитата(GetSmart @ Jun 2 2006, 04:51) *
Неужто лучше ImageCraft ?

Могу обосновать smile.gif
Go to the top of the page
 
+Quote Post
halfdoom
сообщение Jun 2 2006, 06:51
Сообщение #32


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

Группа: Свой
Сообщений: 1 003
Регистрация: 20-01-05
Пользователь №: 2 072



Цитата(SasaVitebsk @ May 27 2006, 16:59) *
Вот бы поделился! smile.gif
Я думаю масса людей было бы Вам благодарна.
Я пока не нахожу в себе сил такую работу проделать. smile.gif
Ну и описаний не достаточно. Как-то они разбросаны и беспорядочны.

В принципе можно, немного причесать только. Скоро не обещаю, но попробую.
Go to the top of the page
 
+Quote Post
_4afc_
сообщение Jun 2 2006, 09:45
Сообщение #33


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

Группа: Свой
Сообщений: 1 262
Регистрация: 13-10-05
Из: Санкт-Петербург
Пользователь №: 9 565



Цитата(defunct @ May 29 2006, 18:10) *
Цитата(_4afc_ @ May 29 2006, 15:54) *

Ну и вообще прерывания лучше на ассемблере писать, а то слишком много ресурсов съедает.

Не убедительно ;>
В таком случае лучше вообще все писать на асм..


Я так и сделал. Просто компилируется всё данным пакетом (WinAVR).
В прерываниях я имел в виду, что при входе там несколько регистров суются в стэк.
Я же выделил несколько регистров для прерываний и в одном из них хранил регистр флагов.
Это ускоряет начало работы вашего обработчика.

Больше всего мешает тормознутость самой A48 - посылки SPI выполняются с ощутимой задержкой.

По поводу printf и прочего - не знаю, я использую только синтаксис си, без использования каких-либо функций из поставок компилятора.

CVAVR- не удобен своим визардом, в частности в визарде делители для таймеров ограничены.
Кроме того для A128 генерился код, который не работал сразу (пара регистров не инитилась).

ImageCraft - очень близок к WinAVR, но я замучился ставить каждое действие в скобки и постоянно преобразовывать типы перенося рабочий проект из WinAVR в ImageCraft. Читаемость текста пропала абсолютно.
Цитата
Я WinAVR использую года 2 и за это время сложилось достаточно положительное впечатление, но не без причуд. Похоже на уровне оптимизации WinAVR "не знает" что регистры 8 разрядные (разработчики портировали с другой архитектуры без существенной переработки, это моё личное мнение)

полностью согласен, отсюда и страсть к перенисению всех данных в озу.
Go to the top of the page
 
+Quote Post
pitt
сообщение Jun 2 2006, 10:53
Сообщение #34


Местный
***

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



Самый сер'езный нрдостаток AVRGCC, с моей точки зрения, отсутствие прагмы управления оптимизацией.
Разделение проекта на файлы с различной оптимизацией не решает задачи:возникает проблема с видимостью. Кроме того, хотя можно смириться, makefile в таком случае становится кошмаром.


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


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

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



Цитата
отсутствие прагмы управления оптимизацией.

А зачем?
Цитата
Кроме того, хотя можно смириться, makefile в таком случае становится кошмаром.

Если это действительно нужно, пишется makefile не настолько навороченный универсальный как в mfile, а обычный с явно указанными ключами компилятора к каждому файлу и все дела.

ИМХО вся прелесть makefile - возможность накрутить такой режим компиляции, который ни одной IDE не под силу.


--------------------
Вони шукають те, чого нема,
Щоб довести, що його не існує.
Go to the top of the page
 
+Quote Post
WHALE
сообщение Jun 2 2006, 12:32
Сообщение #36


Знающий
****

Группа: Свой
Сообщений: 902
Регистрация: 2-01-06
Из: Краснодар
Пользователь №: 12 768



Цитата(_4afc_ @ Jun 2 2006, 13:45) *
Больше всего мешает тормознутость самой A48 - посылки SPI выполняются с ощутимой задержкой.

CVAVR- не удобен своим визардом, в частности в визарде делители для таймеров ограничены.
Кроме того для A128 генерился код, который не работал сразу (пара регистров не инитилась).

Можно пару вопросов?
А как вы меряли задержку посылки SPI-тестовой прогой в цикле-загрузка данных-дернуть пин.И как частотомером в интервальном режиме или осцилом с внешней синхронизацией?
И вывод по поллингу или по прерываниям?
И сколько тактов получилась задержка?
А насчет кодвижина вы попали пальцем в небо cranky.gif В визарде устнавливаются все разряды прескалера,и насчет меги128-у меня сейчас на столе девайс лежит-все путем,в стартап не лазил.
С какими регистрами проблема-то была?


--------------------
"Hello, word!" - 17 errors 56 warnings
Go to the top of the page
 
+Quote Post
pitt
сообщение Jun 2 2006, 12:54
Сообщение #37


Местный
***

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



Цитата(beer_warrior @ Jun 2 2006, 08:10) *
Цитата
отсутствие прагмы управления оптимизацией.

А зачем?

Это примерно тоже самое как и иностранный язык! Не понимаю ну и зачем?!
Есть такое понятие как инкапсуляция. Чтобы какая-нибудь переменная была видима только в одном файле ее делают static. Теперь представем себе, что она нам необходима в нескольких местах, которые хотелось бы оптимизировать по-разному, но переменная-то static...
IAR, как наиболее профессиональный компилятор эту прагму поддерживает.


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


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

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



Цитата
Теперь представем себе, что она нам необходима в нескольких местах, которые хотелось бы оптимизировать по-разному

Вот этого то и не понимаю, код или отпимизируеться или нет.
Зачем это нужно с отдельно взятыми модулями? Все равно оно все ляжет в один бинарник. Тем более как сделать это я показал.


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


Местный
***

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



Цитата(beer_warrior @ Jun 2 2006, 09:07) *
Вот этого то и не понимаю.

А вот тут, извините, помочь не смогу...

Сообщение отредактировал pitt - Jun 2 2006, 14:00


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


Местный
***

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



avrfreaks


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


Участник
*

Группа: Новичок
Сообщений: 34
Регистрация: 2-10-05
Пользователь №: 9 141



Помогите разобраться. Не собирается проект. Линковщик ругается, что не определить ссылку. Вот что пытаюсь собрать:

main.cpp
Код
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
#include <avr/wdt.h>
#include <avr/pgmspace.h>
#include "clDS1820.h"

int main(void)
{
clDS1820<4> dd;
volatile uint8_t d=dd.Finish();
for(;;);
return (0);
};


clDS1820.h
Код
#ifndef _DS1820_MY_LIBRARY_
#define _DS1820_MY_LIBRARY_
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>

template <uint8_t count> class clDS1820
{
private:
    static const uint8_t dsd=4;
public:
    uint8_t Finish(void);
};
#endif


clDS1820.cpp
Код
#include "clDS1820.h"
template <uint8_t count> uint8_t clDS1820<count>::Finish(void)
{
return(dsd);
}


Вот что выдает компилятор:
Код
avr-gcc (GCC) 3.4.5
Copyright (C) 2004 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Compiling: main.cpp
avr-g++ -c -mmcu=at90can128 -I. -gdwarf-2 -DF_CPU=14745600UL  -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wa,-adhlns=main.lst -Ic:\Sourse\Library -std=gnu++98 -MD -MP -MF .dep/main.o.d main.cpp -o main.o
main.cpp: In function `int main()':
main.cpp:12: warning: unused variable 'd'

Compiling: clDS1820.cpp
avr-g++ -c -mmcu=at90can128 -I. -gdwarf-2 -DF_CPU=14745600UL  -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wa,-adhlns=clDS1820.lst -Ic:\Sourse\Library -std=gnu++98 -MD -MP -MF .dep/clDS1820.o.d clDS1820.cpp -o clDS1820.o

Linking: main.elf
avr-g++ -mmcu=at90can128 -I. -gdwarf-2 -DF_CPU=14745600UL  -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wa,-adhlns=main.o -Ic:\Sourse\Library -std=gnu++98 -MD -MP -MF .dep/main.elf.d main.o clDS1820.o --output main.elf -Wl,-Map=main.map,--cref    -lm
main.o: In function `main':
C:\Sourse\Spirit\trunk\GCC/main.cpp:12: undefined reference to `clDS1820<(unsigned char)4>::Finish()'
C:\WinAVR\utils\bin\make.exe: *** [main.elf] Error 1

> Process Exit Code: 2
> Time Taken: 00:00


Если функцию Final описать в файле clDS1820.h, т.е. при объявлении класса, то все собирается. Т.е. вот так:
Код
template <uint8_t count> class clDS1820
{
private:
    static const uint8_t dsd=4;
public:
    uint8_t Finish(void){return(dsd);};
};
Go to the top of the page
 
+Quote Post

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

 


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


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