WinAvr в вопросах и ответах

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
vitalik_1984
Поставщик валерьянки для Кота
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень
Контактная информация:

Re: WinAvr в вопросах и ответах

Сообщение vitalik_1984 »

volatile не пробовали делать?
В поисках истины человек развивается.
Реклама
Аватара пользователя
urry
Сверлит текстолит когтями
Сообщения: 1262
Зарегистрирован: Пн дек 08, 2008 10:58:48
Откуда: Винница
Контактная информация:

Re: WinAvr в вопросах и ответах

Сообщение urry »

да дело, думаю, не в volatile - он же кричит, что срывается прерывание по уарту - значит, плюнуть на библиотеку, принимать в озу, а, когда есть возможность и гарантированное время для записи - писать.
Алгоритм менять надо, а не ножки у кроватей пилить....
Реклама
Аватара пользователя
_dark
Встал на лапы
Сообщения: 93
Зарегистрирован: Чт апр 26, 2012 14:30:40
Откуда: под Москвой

Re: WinAvr в вопросах и ответах

Сообщение _dark »

vitalik_1984 писал(а):volatile не пробовали делать?


Все глобальные переменные объявлены с volatile (в посте это указано):
volatile uint8_t fCmdComplite = 0;
volatile UCHAR BufAdc1[281] __attribute__ ((section (".xdata")));

В общем то проблема решена:

Для тех кто наступит на те же грабли:
наплюйте на настройки WinAVR через оболочку (Project/Configeration Options)
просто пользуйтесь внешним Makefile с правками по рекомендации:
http://www.avrfreaks.net/index.php?name ... inavr+xram

при этом на размер сектора Data можно не обращать внимания он как бы переполнен относительно внутреннего RAM
Data: 7570 bytes (184.8% Full)
(.data + .bss + .noinit)

... но осадок остался
в этом варианте SRAM + XRAM фактически единое пространство (сегмент)
и указанные массивы плавно переходят при размещении через границу 4К SRAM

Пока так и не понял как вынести массивы в отдельный сегмент и разместить их гарантированно в XRAM.
Описанный двумя постами выше вариант размещает их в нужной области но портит кучу (если я правильно понял).

Копать дальше и учить матчасть нет времени, если кто разберется или знает как решить этот вопрос,
буду благодарен за любые посказки.
MS24
Нашел транзистор. Понюхал.
Сообщения: 172
Зарегистрирован: Пн мар 19, 2012 13:04:11

Re: WinAvr в вопросах и ответах

Сообщение MS24 »

Ребят, компилятор ругатеся на такой вот текс, atmega 128, не могу понять в чем дело!

ldi temp, (1<<UCSZ01)|(1<<UCSZ00)
out UCSR0C,temp
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
vitalik_1984
Поставщик валерьянки для Кота
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень
Контактная информация:

Re: WinAvr в вопросах и ответах

Сообщение vitalik_1984 »

полный текст пожалуйста... у вас возможно не подключен заголовочный файл микроконтроллера типа
.include "mega128.inc"
В поисках истины человек развивается.
Реклама
MS24
Нашел транзистор. Понюхал.
Сообщения: 172
Зарегистрирован: Пн мар 19, 2012 13:04:11

Re: WinAvr в вопросах и ответах

Сообщение MS24 »

vitalik_1984 писал(а):полный текст пожалуйста... у вас возможно не подключен заголовочный файл микроконтроллера типа
.include "mega128.inc"

нет подключен, видимо эти команды не работают в том адресном пространсвте, где установлен этот регистр
Вложения
ShagDvig.asm
(9.24 КБ) 347 скачиваний
Реклама
Аватара пользователя
ILYAUL
Держит паяльник хвостом
Сообщения: 906
Зарегистрирован: Ср мар 28, 2012 21:45:24
Откуда: ВО

Re: WinAvr в вопросах и ответах

Сообщение ILYAUL »

1. reti убрать - заменить на .org adress . Адрес взять в файле m128def.inc
2. out где это необходимо заменить на sts - можно узнать из DS - адресное пространство регистров ввода/вывода
MS24
Нашел транзистор. Понюхал.
Сообщения: 172
Зарегистрирован: Пн мар 19, 2012 13:04:11

Re: WinAvr в вопросах и ответах

Сообщение MS24 »

ILYAUL писал(а):1. reti убрать - заменить на .org adress . Адрес взять в файле m128def.inc
2. out где это необходимо заменить на sts - можно узнать из DS - адресное пространство регистров ввода/вывода

А вы не могли бы мне написать эту строчку? Я просто не писал на асм до этого, слабо разбираюсь.
Аватара пользователя
ChipKiller
Сверлит текстолит когтями
Сообщения: 1163
Зарегистрирован: Ср янв 05, 2011 16:25:15

Re: WinAvr в вопросах и ответах

Сообщение ChipKiller »

ILYAUL писал(а):2. out где это необходимо заменить на sts - можно узнать из DS - адресное пространство регистров ввода/вывода
.. еще лучше вставить в начало программы макрос и забыть про эту "головную боль"

Код: Выделить всё

.macro  outi
   ldi   r16,@1
   .if(@0 > 0x3F)
   sts @0,r16
   .else
   out @0,r16
   .endif
.endm

теперь о "правильности" out или sts думает компилятор
TICLIR
Встал на лапы
Сообщения: 134
Зарегистрирован: Вс авг 01, 2010 16:05:25

Re: WinAvr в вопросах и ответах

Сообщение TICLIR »

Доброго времени суток. При изучении программ встречается ключевое слово auto,за что отвечает это слово объясните. Спасибо.
Аватара пользователя
vitalik_1984
Поставщик валерьянки для Кота
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень
Контактная информация:

Re: WinAvr в вопросах и ответах

Сообщение vitalik_1984 »

Пример приведите
я сам могу написать

Код: Выделить всё


int auto
(char x);
 
В поисках истины человек развивается.
TICLIR
Встал на лапы
Сообщения: 134
Зарегистрирован: Вс авг 01, 2010 16:05:25

Re: WinAvr в вопросах и ответах

Сообщение TICLIR »

А, что без примера ни как,дело в том что изучаю на другом компе,и в другом месте. Мме хотябы в общих чертах.
Совесть
Встал на лапы
Сообщения: 106
Зарегистрирован: Пн мар 26, 2012 05:25:06

Re: WinAvr в вопросах и ответах

Сообщение Совесть »

vitalik_1984 - где вы это можете написать, на заборе?

TICLIR - смотря какие программы вы изучаете. Изначально auto определял расположение переменной на стеке в отношении к МК вроде как никакой смысловой нагрузки не несет, в новом с++ это автоматический выбор типа переменной. Примеров/описаний на просторах интернета более чем достаточно.
TICLIR
Встал на лапы
Сообщения: 134
Зарегистрирован: Вс авг 01, 2010 16:05:25

Re: WinAvr в вопросах и ответах

Сообщение TICLIR »

Совесть писал(а):
TICLIR - смотря какие программы вы изучаете. Изначально auto определял расположение переменной на стеке в отношении к МК вроде как никакой смысловой нагрузки не несет, в новом с++ это автоматический выбор типа переменной. Примеров/описаний на просторах интернета более чем достаточно.

Спасибо, я думаю мне больше и не надо.
TICLIR
Встал на лапы
Сообщения: 134
Зарегистрирован: Вс авг 01, 2010 16:05:25

Re: WinAvr в вопросах и ответах

Сообщение TICLIR »

Бывает так что, программа не всегда заходит в функцию. Считает, если ни чего не изменилось то и заходить туда не надо. А вот можно указать компилятору что заходить туда надо всегда при вызове функции, как нибудь при помощи ASM включения.
Аватара пользователя
vitalik_1984
Поставщик валерьянки для Кота
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень
Контактная информация:

Re: WinAvr в вопросах и ответах

Сообщение vitalik_1984 »

волшебное слово volatile в нужном месте должно решить проблему переменные, про которые компилятор думает, что не меняются( хотя это не так) нужно объявлять с модификатором volatile.
Пример: в прерывании меняется переменная, в основном цикле читается.В обычном виде процесс чтения может упроститься компилятором до приравнивания константе.Добавили модификатор- уже чтение переменной и работа нормальная.
Ну это в упрощенном виде, может оно в реальности не совсем так выглядит.

Вообще неплохо было бы взглянуть на вашу функцию, чтобы точнее сказать, в этом ли дело или все же лучше переписать на более понятный для машины вариант.
В поисках истины человек развивается.
Аватара пользователя
_dark
Встал на лапы
Сообщения: 93
Зарегистрирован: Чт апр 26, 2012 14:30:40
Откуда: под Москвой

Re: WinAvr в вопросах и ответах

Сообщение _dark »

Кто-нибудь сталкивался с таким вопросом:
(WinAVR, AVRstudio 4.19)
Требуется загрузчик для Mega128, сам загрузчик написан и работает когда его размещаешь в нижней области как обычную программу (естественно работает в этом случае все кроме самих функций загрузки, но это не важно, главное отрабатываются прерывания и сам основной цикл).

Однако стоит загрузить его по адресу 1F000, как ничего не работает (нет прерываний и сам основной цикл не крутится)
(fuse BOOTRST=0, BOOTSZ0=0, BOOTSZ1=0, т.е. вектор прерываний смещен и boot равен 4096).

Собственно вопрос похоже сводится к тому, что для boot сектора hex должен быть оформлен както по другому что-ли. Сравнил то что получается в WinAVR с подобным своим проектом под ImageCraft - hex файлы разные (адреса после ICC смещены на 1F000).
Но в ICC все просто - перед компиляцией выбирается опция "проект как boot-сектор" и все.
А как в WinAVR указать это?

З.Ы.
В майкфайле ввел:
BOOTLOADER_ADDRESS = 0x1F000
BOOTSIZE=4096
LDFLAGS += -Wl,--section-start=.bootloader=$(BOOTLOADER_ADDRESS)

- не помогает, в hex все равно адреса от 0
Аватара пользователя
_dark
Встал на лапы
Сообщения: 93
Зарегистрирован: Чт апр 26, 2012 14:30:40
Откуда: под Москвой

Re: WinAvr в вопросах и ответах

Сообщение _dark »

ЗАРАБОТАЛО!!! :))

Достаточно было указать:
BOOTLOADER_ADDRESS = 0x1E000
LDFLAGS += -Wl,--section-start=.text=$(BOOTLOADER_ADDRESS)


ну и не забыть выставить IVSEL = 1
Аватара пользователя
SarCity
Прорезались зубы
Сообщения: 215
Зарегистрирован: Вт июн 10, 2008 09:17:06
Откуда: г. Саратов
Контактная информация:

Re: WinAvr в вопросах и ответах

Сообщение SarCity »

Помогите разобраться с WinAvr чайнику. Не компилируется прошивка:
СпойлерC:\screenkeys/screenkeytest.c:12: undefined reference to `sk_init'
C:\screenkeys/screenkeytest.c:13: undefined reference to `sk_set_color'
C:\screenkeys/screenkeytest.c:14: undefined reference to `sk_set_text'
C:\screenkeys/screenkeytest.c:15: undefined reference to `sk_set_text'
C:\screenkeys/screenkeytest.c:16: undefined reference to `sk_set_text'
C:\screenkeys/screenkeytest.c:33: undefined reference to `sk_set_pixels'
C:\screenkeys/screenkeytest.c:34: undefined reference to `sk_set_text'
C:\screenkeys/screenkeytest.c:35: undefined reference to `sk_set_color'
C:\screenkeys/screenkeytest.c:40: undefined reference to `sk_set_text'
C:\screenkeys/screenkeytest.c:41: undefined reference to `sk_clear_text'
C:\screenkeys/screenkeytest.c:42: undefined reference to `sk_set_color'

Все понятно ругается на незадефайненые переменные, но дело в том, что они объявлены в хидере, который, в свою очередь, подключен с помощью include.
Прошивка взята с avrfreaks. Winavr самый свежий.
Вложения
screenkey.rar
Исходник
(3.16 КБ) 189 скачиваний
Аватара пользователя
vitalik_1984
Поставщик валерьянки для Кота
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень
Контактная информация:

Re: WinAvr в вопросах и ответах

Сообщение vitalik_1984 »

а где конкретно объявление самого тело этих функций?
вижу объявлены прототипы, да еще и с модификатором extern, а сами то действия где прописаны?

если не в курсе,есть три этапа использования функции.
1 прототип, указывается какие типы данных используют в данной функции.
2 объявление тела функции,указывается что нужно делать с этими данными и что будет результатом.
3 само использование.

причем пока не используется следующий этап первых как бы и не существует.

в большинстве случаев первые два этапа совмещаются.
а у вас получается второй этап пропущен вот вам и проблема.
компилятор просто не знает что с этими данными делать нужно.
В поисках истины человек развивается.
Ответить

Вернуться в «AVR»