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

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

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

Сообщение _dark »

ARV писал(а):вот это http://www.simple-devices.ru/attachment ... 3_2011.pdf не проливает свет на ваш вопрос о внешнем ОЗУ?
Увы, хотя пользуюсь этим доком как справочником....

для примера
uint8_t BufAdc[LEN_ADC_BUF] __attribute__ ((section (".xdata")));
в makefile
LDFLAGS += -Wl,-section-start=.xdata=0x801000

по листингу (map file) после сборки массив перемещен правильно, но это не работает...
работа с ХRAM естественно включена...

ps
точнее после таких опций программа перестает запускаться и где косяк пока не могу найти

pps
насколько проще было в ImageCraft выбрал опцию RAM = 64kWord и никакой головной боли... да это уже крик души...
Реклама
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18546
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

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

Сообщение ARV »

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

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

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

Сообщение _dark »

ARV писал(а):что именно не работает? что показывает протеус?
Хз, в протеусе не работаю, только на реальных камнях и без эмулятора.

В общем как и раньше проблемма устранилась принудительным переключением на библиотеки WINAVR, вместо тулчайна от AtmelStuldio 6.2 в makefile...
При этом все выше описанные приседания не нужны, т.е. убрал принудительное смещения массивов во внешнюю ХRAM,
в результате линкер разбрасывает массивы как хочет, в т.ч. и с переходом через границы резидентного RAM,
но все работает ...
Т.о. вопрос перешел в чисто теоретическую плоскость "можно ли и как это сделать, если очень хочется вынести массивы в XRAM?"

зы
Может конкурс объявить?
первому кто внятно и обстоятельно опишет способ с примером (исходником) под Mega128 ящик пива (или если не Московский регион эквивалент на карту СБ) :)) :beer:
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18546
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

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

Сообщение ARV »

ну так в случае с WinAVR и пользуйтесь принудительным указанием секции для массива - должно работать
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

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

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

Сообщение _dark »

ARV писал(а):ну так в случае с WinAVR и пользуйтесь принудительным указанием секции для массива - должно работать
должно, но к сожалению не работает...
во всяком случае тот вариант, что я описал
возможно еще чего-то не хватает...
Реклама
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18546
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

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

Сообщение ARV »

Ну не знаю... я только что проверил в протеусе - работает. Вот мой тестовый код:

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

#include <avr/io.h>
#include <avr_helper.h>
#include <stdlib.h>

#define SZ 100
static uint8_t earray[SZ] __attribute__((section(".xdata")));
static uint16_t sr = 1;

volatile uint8_t *ptr = (void*)0x2000;

int main(void){
	MCUCR = _BV(SRE);
	XMCRB = _BV(XMBK) |  (1<<XMM1) | (1<<XMM0);
	while(1){
		srand(sr++);
		ptr = 0x2000;
		for(uint8_t i=0; i<SZ; i++){
			*ptr++ = rand();
			PORTB = earray[i];
		}
	}
}
секцию .xdata я разместил с адреса 0x802000, так как у atmega128 внутренняя RAM простирается вплоть до адреса 0x10FF, поэтому то, что вы указывали
_dark писал(а):LDFLAGS += -Wl,-section-start=.xdata=0x801000
попадало во внутренее ОЗУ как раз в область стека, и все портило

вот схема моего теста
Изображение

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

P.S. Пиво я заработал? :wink:
Вложения
test.GIF
(160.77 КБ) 1120 скачиваний
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

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

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

Сообщение _dark »

ARV писал(а): P.S. Пиво я заработал? :wink:
ARV cорри за долгое молчание, тут небольшой отпуск образовался...
:beer: в ЛС отписал!

Дело было не в xram, а в спешке 4 месяца назад добавил кривую инициализацию массивов в тестах...
снес ее и все ок, но репу почесать пришлось! Отсюда вывод "программизмом нужно заниматься регулярно"!

ps
Cтимул великая вещь, всегда работает! :)))
TechMike
Прорезались зубы
Сообщения: 247
Зарегистрирован: Сб дек 15, 2007 23:00:54
Откуда: Moscow
Контактная информация:

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

Сообщение TechMike »

ARV писал(а):решение для windows может быть таким (для линуксоидов не привожу, ибо там все элементарно делается башем)
1. создается файл ver.h, в котором вводится начальный номер версии, например, 0. то есть только 1 символ '0'
2. этот файл инклюдится в вашем исходнике в нужном месте, например, так

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

int version =
#include "ver.h"
;
3. создается файл increment_version.bat следующего содержимого

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

@echo off
set /p version=<ver.h
set /a version=version+1
echo %version% >ver.h
4. если вы компилируете проект из IDE, то задаете этой IDE команду запускать increment_version.bat после успешной сборки проекта. если для компиляции используется makefile, то аналогично в нем заставляете исполнить этот батничек после успешной сборки проекта
5. радуетесь и ликуете, поднимая тосты за мое здоровье :)))
Заработало, важно чтобы в исходник вставить ссылку на ver.h именно как ARV написал (на разных строках).
В makefile нужно для секции где идет:

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

# Define programs and commands.
добавить константу

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

VERIONS_INCREMENT_SCRIPT = increment_version.bat
где идет:

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

# Default target.
all: begin gccversion sizebefore build sizeafter end
добавить строчку

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

	@$(VERIONS_INCREMENT_SCRIPT)
Перед этой строкой ТАБУЛЯЦИЯ, иначе получите ошибку

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

missing separator. Stop. 
TICLIR
Встал на лапы
Сообщения: 134
Зарегистрирован: Вс авг 01, 2010 16:05:25

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

Сообщение TICLIR »

Доброго времени суток. Разъясните что это значит:
#define CONCAT(a, b) a ## b
меня больше интересует что это : a ## b, как это читать?
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

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

Сообщение WiseLord »

Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

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

Сообщение Alexeyslav »

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

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

Сообщение TICLIR »

WiseLord писал(а):https://ru.wikipedia.org/wiki/Препроцессор_Си
Спасибо!
TICLIR
Встал на лапы
Сообщения: 134
Зарегистрирован: Вс авг 01, 2010 16:05:25

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

Сообщение TICLIR »

Доброго времени суток. Вопрос такой, я взял готовый проект "USB-RS232" который собранный на AVRStudio4, и попробовал переложить на WinAvr не меняя самой программы, в результате драйвер определяться виндой, но стоит запустить программу TEST_COM как программа выдаёт ошибку "Port:COM30 Error setting parameters from DCB". Попытался изменить параметры Makefile которые есть в настройках, и ни чего всё равно эта ошибка. Значит, как я думаю , надо глубже лезть в Makefile. А вообще вопрос возможно откомпилировать драйвер в WinAvr правильно?
Аватара пользователя
Kavka
Мудрый кот
Сообщения: 1810
Зарегистрирован: Чт июн 10, 2010 08:55:35
Откуда: Сибирские Афины

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

Сообщение Kavka »

AVRStudio 4 - оболочка/редактор/симулятор/отладчик. К ней стандартно идёт ассемблер.
WinAVR набор утилит (компиляторы, линкер и прочее), который можно использовать и без студии.
Что значит "переложить на WinAvr"? Уточняйте что вы делаете и что у вас не так?
Ссылки на исходный проект? Какие версии (точно) студии и ВинАВРа стоят у вас?
И т.д. и т.п.
Если ещё не знакомы, то ознакомьтесь.
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
TICLIR
Встал на лапы
Сообщения: 134
Зарегистрирован: Вс авг 01, 2010 16:05:25

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

Сообщение TICLIR »

Дело в том что мне неудобна AVRStudio 4.18, я привык к WinAvr-20100110. Занялся изучать USB-rs232 драйвер, который заточен под
Studio 4, я попытался переложить всё в WinAvr, проект компилируется без синтаксических ошибок. Но в целом, не работает.
Подключаю к USB винда определяет что это USB-rs232, при запуске TEST_COM и даже другие программы пробовал выдаёт ошибку.
Ссылки у меня нет могу предоставить архив.
Вложения
cdc232-mega16.rar
(201.99 КБ) 208 скачиваний
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

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

Сообщение WiseLord »

А что значит - заточен под AVRStudio? Если не ошибаюсь, студия использует для C компилятор avr-gcc, WinAVR - это тоже avr-gcc плюс другие утилиты. В чем проявляется эта " заточенность"?
TICLIR
Встал на лапы
Сообщения: 134
Зарегистрирован: Вс авг 01, 2010 16:05:25

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

Сообщение TICLIR »

Я имею ввиду что исходник был компилирован в Студии и работает без проблем, я повторюсь, мне не не нравится Студия, я хочу заниматься в WinAvr, здесь тоже собирается но работает с ошибкой, я считаю надо откорректировать Makefile, но я не знаю как.
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

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

Сообщение WiseLord »

А проверьте этот файл. Его я сейчас собрал в Linux, с родным Makefile из архива, что Вы дали, несколько подправив код для сборки ("отравленные" прерывания и неправильное объявление констант в PROGMEM). Если будет нормально работать-определяться, то, думаю, и у Вас соберётся в WinAVR.

P.S. Приложил ещё и файл патча с моими правками в коде.
Вложения
cdc232.patch.7z
(1.18 КБ) 173 скачивания
cdcmega.hex.7z
(2.97 КБ) 164 скачивания
TICLIR
Встал на лапы
Сообщения: 134
Зарегистрирован: Вс авг 01, 2010 16:05:25

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

Сообщение TICLIR »

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

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

Сообщение TICLIR »

Да заработала, определяеться и обмен происходит.
Ответить

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