WinAvr в вопросах и ответах
- vitalik_1984
- Поставщик валерьянки для Кота
- Сообщения: 2482
- Зарегистрирован: Пт авг 27, 2010 05:57:06
- Откуда: Тюмень
- Контактная информация:
- Реклама
- urry
- Сверлит текстолит когтями
- Сообщения: 1262
- Зарегистрирован: Пн дек 08, 2008 10:58:48
- Откуда: Винница
- Контактная информация:
Re: WinAvr в вопросах и ответах
да дело, думаю, не в volatile - он же кричит, что срывается прерывание по уарту - значит, плюнуть на библиотеку, принимать в озу, а, когда есть возможность и гарантированное время для записи - писать.
Алгоритм менять надо, а не ножки у кроватей пилить....
Алгоритм менять надо, а не ножки у кроватей пилить....
Re: WinAvr в вопросах и ответах
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.
Описанный двумя постами выше вариант размещает их в нужной области но портит кучу (если я правильно понял).
Копать дальше и учить матчасть нет времени, если кто разберется или знает как решить этот вопрос,
буду благодарен за любые посказки.
Re: WinAvr в вопросах и ответах
Ребят, компилятор ругатеся на такой вот текс, atmega 128, не могу понять в чем дело!
ldi temp, (1<<UCSZ01)|(1<<UCSZ00)
out UCSR0C,temp
ldi temp, (1<<UCSZ01)|(1<<UCSZ00)
out UCSR0C,temp
- vitalik_1984
- Поставщик валерьянки для Кота
- Сообщения: 2482
- Зарегистрирован: Пт авг 27, 2010 05:57:06
- Откуда: Тюмень
- Контактная информация:
Re: WinAvr в вопросах и ответах
полный текст пожалуйста... у вас возможно не подключен заголовочный файл микроконтроллера типа
.include "mega128.inc"
.include "mega128.inc"
В поисках истины человек развивается.
- Реклама
Re: WinAvr в вопросах и ответах
vitalik_1984 писал(а):полный текст пожалуйста... у вас возможно не подключен заголовочный файл микроконтроллера типа
.include "mega128.inc"
нет подключен, видимо эти команды не работают в том адресном пространсвте, где установлен этот регистр
- Вложения
-
- ShagDvig.asm
- (9.24 КБ) 347 скачиваний
Re: WinAvr в вопросах и ответах
1. reti убрать - заменить на .org adress . Адрес взять в файле m128def.inc
2. out где это необходимо заменить на sts - можно узнать из DS - адресное пространство регистров ввода/вывода
2. out где это необходимо заменить на sts - можно узнать из DS - адресное пространство регистров ввода/вывода
Re: WinAvr в вопросах и ответах
ILYAUL писал(а):1. reti убрать - заменить на .org adress . Адрес взять в файле m128def.inc
2. out где это необходимо заменить на sts - можно узнать из DS - адресное пространство регистров ввода/вывода
А вы не могли бы мне написать эту строчку? Я просто не писал на асм до этого, слабо разбираюсь.
- ChipKiller
- Сверлит текстолит когтями
- Сообщения: 1163
- Зарегистрирован: Ср янв 05, 2011 16:25:15
Re: WinAvr в вопросах и ответах
.. еще лучше вставить в начало программы макрос и забыть про эту "головную боль"ILYAUL писал(а):2. out где это необходимо заменить на sts - можно узнать из DS - адресное пространство регистров ввода/вывода
Код: Выделить всё
.macro outi
ldi r16,@1
.if(@0 > 0x3F)
sts @0,r16
.else
out @0,r16
.endif
.endmтеперь о "правильности" out или sts думает компилятор
Re: WinAvr в вопросах и ответах
Доброго времени суток. При изучении программ встречается ключевое слово auto,за что отвечает это слово объясните. Спасибо.
- vitalik_1984
- Поставщик валерьянки для Кота
- Сообщения: 2482
- Зарегистрирован: Пт авг 27, 2010 05:57:06
- Откуда: Тюмень
- Контактная информация:
Re: WinAvr в вопросах и ответах
В поисках истины человек развивается.
Re: WinAvr в вопросах и ответах
А, что без примера ни как,дело в том что изучаю на другом компе,и в другом месте. Мме хотябы в общих чертах.
Re: WinAvr в вопросах и ответах
vitalik_1984 - где вы это можете написать, на заборе?
TICLIR - смотря какие программы вы изучаете. Изначально auto определял расположение переменной на стеке в отношении к МК вроде как никакой смысловой нагрузки не несет, в новом с++ это автоматический выбор типа переменной. Примеров/описаний на просторах интернета более чем достаточно.
TICLIR - смотря какие программы вы изучаете. Изначально auto определял расположение переменной на стеке в отношении к МК вроде как никакой смысловой нагрузки не несет, в новом с++ это автоматический выбор типа переменной. Примеров/описаний на просторах интернета более чем достаточно.
Re: WinAvr в вопросах и ответах
Совесть писал(а):
TICLIR - смотря какие программы вы изучаете. Изначально auto определял расположение переменной на стеке в отношении к МК вроде как никакой смысловой нагрузки не несет, в новом с++ это автоматический выбор типа переменной. Примеров/описаний на просторах интернета более чем достаточно.
Спасибо, я думаю мне больше и не надо.
Re: WinAvr в вопросах и ответах
Бывает так что, программа не всегда заходит в функцию. Считает, если ни чего не изменилось то и заходить туда не надо. А вот можно указать компилятору что заходить туда надо всегда при вызове функции, как нибудь при помощи ASM включения.
- vitalik_1984
- Поставщик валерьянки для Кота
- Сообщения: 2482
- Зарегистрирован: Пт авг 27, 2010 05:57:06
- Откуда: Тюмень
- Контактная информация:
Re: WinAvr в вопросах и ответах
волшебное слово volatile в нужном месте должно решить проблему переменные, про которые компилятор думает, что не меняются( хотя это не так) нужно объявлять с модификатором volatile.
Пример: в прерывании меняется переменная, в основном цикле читается.В обычном виде процесс чтения может упроститься компилятором до приравнивания константе.Добавили модификатор- уже чтение переменной и работа нормальная.
Ну это в упрощенном виде, может оно в реальности не совсем так выглядит.
Вообще неплохо было бы взглянуть на вашу функцию, чтобы точнее сказать, в этом ли дело или все же лучше переписать на более понятный для машины вариант.
Пример: в прерывании меняется переменная, в основном цикле читается.В обычном виде процесс чтения может упроститься компилятором до приравнивания константе.Добавили модификатор- уже чтение переменной и работа нормальная.
Ну это в упрощенном виде, может оно в реальности не совсем так выглядит.
Вообще неплохо было бы взглянуть на вашу функцию, чтобы точнее сказать, в этом ли дело или все же лучше переписать на более понятный для машины вариант.
В поисках истины человек развивается.
Re: WinAvr в вопросах и ответах
Кто-нибудь сталкивался с таким вопросом:
(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
(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
Re: WinAvr в вопросах и ответах
ЗАРАБОТАЛО!!!
Достаточно было указать:
BOOTLOADER_ADDRESS = 0x1E000
LDFLAGS += -Wl,--section-start=.text=$(BOOTLOADER_ADDRESS)
ну и не забыть выставить IVSEL = 1
Достаточно было указать:
BOOTLOADER_ADDRESS = 0x1E000
LDFLAGS += -Wl,--section-start=.text=$(BOOTLOADER_ADDRESS)
ну и не забыть выставить IVSEL = 1
- SarCity
- Прорезались зубы
- Сообщения: 215
- Зарегистрирован: Вт июн 10, 2008 09:17:06
- Откуда: г. Саратов
- Контактная информация:
Re: WinAvr в вопросах и ответах
Помогите разобраться с WinAvr чайнику. Не компилируется прошивка:
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 самый свежий.
Спойлер
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 в вопросах и ответах
а где конкретно объявление самого тело этих функций?
вижу объявлены прототипы, да еще и с модификатором extern, а сами то действия где прописаны?
если не в курсе,есть три этапа использования функции.
1 прототип, указывается какие типы данных используют в данной функции.
2 объявление тела функции,указывается что нужно делать с этими данными и что будет результатом.
3 само использование.
причем пока не используется следующий этап первых как бы и не существует.
в большинстве случаев первые два этапа совмещаются.
а у вас получается второй этап пропущен вот вам и проблема.
компилятор просто не знает что с этими данными делать нужно.
вижу объявлены прототипы, да еще и с модификатором extern, а сами то действия где прописаны?
если не в курсе,есть три этапа использования функции.
1 прототип, указывается какие типы данных используют в данной функции.
2 объявление тела функции,указывается что нужно делать с этими данными и что будет результатом.
3 само использование.
причем пока не используется следующий этап первых как бы и не существует.
в большинстве случаев первые два этапа совмещаются.
а у вас получается второй этап пропущен вот вам и проблема.
компилятор просто не знает что с этими данными делать нужно.
В поисках истины человек развивается.


