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

 
 
> Вопрос по WINAVR
Karl
сообщение Apr 29 2005, 09:06
Сообщение #1


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

Группа: Свой
Сообщений: 179
Регистрация: 4-02-05
Пользователь №: 2 429



Как расположить массив по определенному адресу в памяти программ? Что нужно сказать компилятору?
Go to the top of the page
 
+Quote Post
4 страниц V   1 2 3 > »   
Start new topic
Ответов (1 - 14)
BorisRozentsvaig
сообщение Apr 29 2005, 11:06
Сообщение #2


Участник
*

Группа: Свой
Сообщений: 36
Регистрация: 23-03-05
Из: Санкт-Петербург
Пользователь №: 3 617



Цитата(Karl @ Apr 29 2005, 13:06)
Как расположить массив по определенному адресу в памяти программ? Что нужно сказать компилятору?
*


Думается, что стандартными средствами, никак. Все что можно делать с переменными в памяти программ см. pgmspace.h и http://users.rcn.com/rneswold/avr/c957.html#PROGMEM
Go to the top of the page
 
+Quote Post
SL@V@
сообщение Apr 29 2005, 11:07
Сообщение #3





Группа: Новичок
Сообщений: 7
Регистрация: 30-03-05
Пользователь №: 3 806



Если в IAR-е то:

__no_init char mas[10] @0x200;

(массив mas[10] в озу по ардесу 0x200)
Go to the top of the page
 
+Quote Post
Karl
сообщение May 3 2005, 10:24
Сообщение #4


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

Группа: Свой
Сообщений: 179
Регистрация: 4-02-05
Пользователь №: 2 429



Цитата(BorisRozentsvaig @ Apr 29 2005, 16:06)
Цитата(Karl @ Apr 29 2005, 13:06)
Как расположить массив по определенному адресу в памяти программ? Что нужно сказать компилятору?
*


Думается, что стандартными средствами, никак. Все что можно делать с переменными в памяти программ см. pgmspace.h и http://users.rcn.com/rneswold/avr/c957.html#PROGMEM
*



Это не совсем то, что мне надо. Хм. А как же тогда программу - загрузчик в загрузочный сектор поместить?
Go to the top of the page
 
+Quote Post
pulsar-17
сообщение May 3 2005, 16:20
Сообщение #5


Участник
*

Группа: Свой
Сообщений: 32
Регистрация: 7-12-04
Из: Московская область
Пользователь №: 1 376



Цитата(Karl @ May 3 2005, 13:24)
А как же тогда программу - загрузчик в загрузочный сектор поместить?
*


Очень просто:

сам загрузчик:
BOOTLOADER_SECTION void func()
{

}

BOOTLOADER_SECTION определен:
#define BOOTLOADER_SECTION __attribute__ ((section (".bootloader")))

в makefile надо пропиcать в параметрах линькера адрес секции:
-Wl,--section-start=.bootloader=0x1FE00

адрес может быть и другой в зависимости от фьюзов(смотри доку на контроллер)
Go to the top of the page
 
+Quote Post
pulsar-17
сообщение May 3 2005, 17:42
Сообщение #6


Участник
*

Группа: Свой
Сообщений: 32
Регистрация: 7-12-04
Из: Московская область
Пользователь №: 1 376



большие массивы данных я конвертировал:

avr-objcopy -I binary --change-addresses 0x1234 -O ihex infile outfile
infile - входной бинарный файл
outfile - выходной файл в формате ihex
вместо 0x1234 указать необходимый адрес

а затем загружал во флэш
Go to the top of the page
 
+Quote Post
Karl
сообщение May 4 2005, 12:31
Сообщение #7


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

Группа: Свой
Сообщений: 179
Регистрация: 4-02-05
Пользователь №: 2 429



Цитата(pulsar-17 @ May 3 2005, 21:20)
Цитата(Karl @ May 3 2005, 13:24)
А как же тогда программу - загрузчик в загрузочный сектор поместить?
*


Очень просто:

сам загрузчик:
BOOTLOADER_SECTION void func()
{

}

BOOTLOADER_SECTION определен:
#define BOOTLOADER_SECTION __attribute__ ((section (".bootloader")))

в makefile надо пропиcать в параметрах линькера адрес секции:
-Wl,--section-start=.bootloader=0x1FE00

адрес может быть и другой в зависимости от фьюзов(смотри доку на контроллер)
*



Попробовал - по вызову функции func() происходит переход на нужное место (по указанному адресу). Только вот самой функции там нет sad.gif . Там вообще пусто.
Go to the top of the page
 
+Quote Post
Karl
сообщение May 4 2005, 13:21
Сообщение #8


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

Группа: Свой
Сообщений: 179
Регистрация: 4-02-05
Пользователь №: 2 429



Реально функция func() располагается в памяти программ там же, гд и была бы без BOOTLOADER_SECTION. Меняется только адрес, на который осуществляется переход после обращения к функции sad.gif
Go to the top of the page
 
+Quote Post
pulsar-17
сообщение May 5 2005, 09:13
Сообщение #9


Участник
*

Группа: Свой
Сообщений: 32
Регистрация: 7-12-04
Из: Московская область
Пользователь №: 1 376



Как я понял переход происходит по адресу указанному в ключе:
-Wl,--section-start=.bootloader=0x1FE00

Какой версией WinAVR Вы пользуетесь?

Если Вы можете пришлите Ваш makefile мне будет значительно легче вам помочь.
Go to the top of the page
 
+Quote Post
Karl
сообщение May 6 2005, 03:25
Сообщение #10


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

Группа: Свой
Сообщений: 179
Регистрация: 4-02-05
Пользователь №: 2 429



Вы поняли правильно. Переход происходит именно по указанному адресу.
Пользуюсь версией WinAVR-20040720. Позавчера скачал WinAVR-20050214 - результат тот же.
Прикрепленные файлы
Прикрепленный файл  Makefile.zip ( 1.67 килобайт ) Кол-во скачиваний: 120
 
Go to the top of the page
 
+Quote Post
pulsar-17
сообщение May 6 2005, 05:08
Сообщение #11


Участник
*

Группа: Свой
Сообщений: 32
Регистрация: 7-12-04
Из: Московская область
Пользователь №: 1 376



Я проверил на версии 20050214.

За исключением лишнего пробела в Makefile в строке 32 криминала нет.

Секция bootloader располагается по заданному адресу, код функции лежит именно там. Проверял по дизассемблеру и для полной достоверности по HEX-файлу.

Тест прилагаю.
В файле boot.c находится пример использования самопрограммирования из моих проектов.
Надеюсь Вам это поможет.
Прикрепленные файлы
Прикрепленный файл  TEST_AVR.rar ( 8.07 килобайт ) Кол-во скачиваний: 151
 
Go to the top of the page
 
+Quote Post
Karl
сообщение May 6 2005, 07:44
Сообщение #12


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

Группа: Свой
Сообщений: 179
Регистрация: 4-02-05
Пользователь №: 2 429



Огромная благодарность за помощь. Действительно, hex - файл собирается верно. Я попался на том, что проверял программу в симуляторе AvrStudio. А cof - файл собирается, похоже, не правильно smile.gif
Но если не сгенерить правильно cof - файл, то не получится отлаживать с JTAG? Нехорошо sad.gif
Go to the top of the page
 
+Quote Post
Karl
сообщение May 18 2005, 03:42
Сообщение #13


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

Группа: Свой
Сообщений: 179
Регистрация: 4-02-05
Пользователь №: 2 429



Так никто не занет, как сделать, чтобы cof - файл создавался правильным???
Go to the top of the page
 
+Quote Post
BorisRozentsvaig
сообщение May 18 2005, 14:27
Сообщение #14


Участник
*

Группа: Свой
Сообщений: 36
Регистрация: 23-03-05
Из: Санкт-Петербург
Пользователь №: 3 617



Цитата(Karl @ May 18 2005, 07:42)
Так никто не занет, как сделать, чтобы cof - файл создавался правильным???
*

В makefile добавь:

BIN = $(AVR)/bin/avr-objcopy
ELFCOF = $(BIN) --debugging \
--change-section-address .data-0x800000 \
--change-section-address .bss-0x800000 \
--change-section-address .noinit-0x800000 \
--change-section-address .eeprom-0x810000

%.cof: %.elf
$(ELFCOF) -O coff-ext-avr $< $@
или
$(ELFCOF) -O coff-avr $< $@

Но, вообще-то, последняя AVR Studio прекрасно понимает формат elf.

Много информации по этому поводу можно найти на avrfreaks.net, например:
h_t_t_p://w_w_w.avrfreaks.net/index.php?name=PNphpBB2&file=viewtopic&t=28815&highlight=elf+support
Go to the top of the page
 
+Quote Post
Karl
сообщение May 19 2005, 10:04
Сообщение #15


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

Группа: Свой
Сообщений: 179
Регистрация: 4-02-05
Пользователь №: 2 429



Попробовал elf - файл. В дизасемблере AVRStudio увидел следующее smile.gif :

@00000F80: boot_write_page
---- F:\Work\Tegran\V1\boot.c -----------------------------------------------------------
9: {
+00000F80: FFFF ??? Data or unknown opcode
No Source -----------------------------------------------------------------------------------
+00000F81: FFFF ??? Data or unknown opcode
+00000F82: FFFF ??? Data or unknown opcode
+00000F83: FFFF ??? Data or unknown opcode
+00000F84: FFFF ??? Data or unknown opcode
+00000F85: FFFF ??? Data or unknown opcode
Go to the top of the page
 
+Quote Post

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

 


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


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