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

 
 
3 страниц V  < 1 2 3  
Reply to this topicStart new topic
> Внешняя SRAM, Выбор скорости
aesok
сообщение Mar 13 2007, 10:44
Сообщение #31


Знающий
****

Группа: Участник
Сообщений: 596
Регистрация: 26-05-06
Из: Москва
Пользователь №: 17 484



Код
И ещё далее по тексту вот так:[code]
.data           0x00800100       0xcc load address 0x0000a6f0
                0x00800100                PROVIDE (__data_start, .)
*(.data)
.data          0x00800100        0xc at.o
.data          0x0080010c       0x1a common.o
    ....


Секция дата расположена по адресу 0x00800100, а не нужном вам 0x00801100. Опция линкера "-Tdata" работает только для контроллеров, у которых внутренняя RAM начинается с адреса 0x60 (AT90S8515), и не работает для тех у которых начинается с 0x100 (ATmega128, ...) или 0x200(ATmega1280, ...). Для них используйте в опцию "--section-start .data=..." - она делает тоже самое и работает всегда.

В LDFLAG вам нужно заменить "-Tdata=0x801100" на "--section-start,.data=0x801100".



Анатолий.
Go to the top of the page
 
+Quote Post
Spider
сообщение Mar 13 2007, 11:46
Сообщение #32


В поисках истины
***

Группа: Свой
Сообщений: 431
Регистрация: 7-01-06
Из: Россия
Пользователь №: 12 923



Цитата(aesok @ Mar 13 2007, 13:44) *
Код
И ещё далее по тексту вот так:[code]
.data           0x00800100       0xcc load address 0x0000a6f0
                0x00800100                PROVIDE (__data_start, .)
*(.data)
.data          0x00800100        0xc at.o
.data          0x0080010c       0x1a common.o
    ....


Секция дата расположена по адресу 0x00800100, а не нужном вам 0x00801100. Опция линкера "-Tdata" работает только для контроллеров, у которых внутренняя RAM начинается с адреса 0x60 (AT90S8515), и не работает для тех у которых начинается с 0x100 (ATmega128, ...) или 0x200(ATmega1280, ...). Для них используйте в опцию "--section-start .data=..." - она делает тоже самое и работает всегда.

В LDFLAG вам нужно заменить "-Tdata=0x801100" на "--section-start,.data=0x801100".
Анатолий.

Кусочек мэйк файла:
Код
## Linker flags
LDFLAGS = $(COMMON)
LDFLAGS += -Wl,-u,vfprintf -Wl,-Map=ppp.map
LDFLAGS += -Wl,-section-start=.data=0x801100,--defsym=__heap_end=0x80ffff

Кусочек мапа:
Код
Linker script and memory map

Address of section .data set to 0x800100
LOAD C:/WinAVR/bin/../lib/gcc/avr/3.4.6/../../../../avr/lib/avr5/crtm128.o
Address of section .data set to 0x801100
                0x0080ffff                __heap_end = 0x80ffff

....

.data           0x00801100       0xd0 load address 0x0000abb0
                0x00801100                PROVIDE (__data_start, .)
*(.data)
.data          0x00801100        0xc at.o
.data          0x0080110c       0x1a common.o

Ща буду пробовать что получилось.
Go to the top of the page
 
+Quote Post
Spider
сообщение Mar 13 2007, 12:32
Сообщение #33


В поисках истины
***

Группа: Свой
Сообщений: 431
Регистрация: 7-01-06
Из: Россия
Пользователь №: 12 923



Получилась полная фигня.
Берём и начинаем отлаживать JTAG'ом. Видим, что все переменные лежат >=0x1100 адресах, но в то же время их начальные значения:
Код
unsigned char str[]="Test";
JTAG'ом видны во внутреней памяти. Если же обратиться к переменной, то возвращается значение из внешней памяти, где конечно же помойка. Запись опять же идёт во внешнюю память. Короче прикольно как-то. Это я что-то не так делаю? Кстати. Если эмулировать AVRStudio Emulator'ом, то всё как надо.
Go to the top of the page
 
+Quote Post
zorromen
сообщение Mar 14 2007, 12:05
Сообщение #34


Местный
***

Группа: Свой
Сообщений: 322
Регистрация: 13-12-05
Пользователь №: 12 147



Привет ... я заметил интересную весч ... что ноги на JTAG которые должны еще и служить ногами для старших адресов ... во время зариси или чтения на 32 кб памяти ваще ничего неделают ... JTAG отсоединен ... тоесть контроллер должен махать ими ... но немашет ... я думаю может во фьюзах надо отключить jtag ? А в окне мемори ваще чушь ...
Go to the top of the page
 
+Quote Post
aesok
сообщение Mar 14 2007, 14:48
Сообщение #35


Знающий
****

Группа: Участник
Сообщений: 596
Регистрация: 26-05-06
Из: Москва
Пользователь №: 17 484



Цитата(Alexey Belyaev @ Mar 13 2007, 12:32) *
Получилась полная фигня.
Берём и начинаем отлаживать JTAG'ом. Видим, что все переменные лежат >=0x1100 адресах, но в то же время их начальные значения:
Код
unsigned char str[]="Test";
JTAG'ом видны во внутреней памяти.


В какой внутреней памяти: в RAM или FLASH? По каким адресам?
Go to the top of the page
 
+Quote Post
zorromen
сообщение Mar 14 2007, 15:39
Сообщение #36


Местный
***

Группа: Свой
Сообщений: 322
Регистрация: 13-12-05
Пользователь №: 12 147



Ахтунг ...
Ша я обнаружил интересный факт ... Ноги которые идут на JTAG ... это 4 старших разряда памяти ... так они не дают работать со всей памятью ... т.е 8к мах ... Я тока отрубил фьюз JTAG и о чудо ноги стали работать ... Тока кать теперь отлаживать прогу? ерунда какаято со стороны разработчиков ...
Смотрю осцилографом...
Go to the top of the page
 
+Quote Post
=GM=
сообщение Mar 14 2007, 19:10
Сообщение #37


Ambidexter
*****

Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282



Цитата(zorromen @ Mar 14 2007, 12:39) *
Ахтунг ...
Ша я обнаружил интересный факт ... Ноги которые идут на JTAG ... это 4 старших разряда памяти ... так они не дают работать со всей памятью ... т.е 8к мах ... Я тока отрубил фьюз JTAG и о чудо ноги стали работать ... Тока кать теперь отлаживать прогу? ерунда какаято со стороны разработчиков ...
Смотрю осцилографом...

Чуда никакого нет, старшие адреса перекрываются альтернативной функцией джейтага. Так что или рыбку или гвоздик(:-).

По поводу отладки в описании говорится - ВСЁ, ЧТО НА КРИСТАЛЛЕ (extensive on-chip debug support) + программирование внешней памяти, еепром, фьюзов...

Размещайте отлаженные куски выше по памяти, а нижние 8К - для отладки...


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
Spider
сообщение Mar 15 2007, 05:41
Сообщение #38


В поисках истины
***

Группа: Свой
Сообщений: 431
Регистрация: 7-01-06
Из: Россия
Пользователь №: 12 923



Цитата(aesok @ Mar 14 2007, 17:48) *
В какой внутреней памяти: в RAM или FLASH? По каким адресам?

B RAM. Ну адреса как и положено для переменных внутренней РАМ от 0 и выше по порядку.
В общем сделал я так: во внешку разместил только кучу, и все "громозкие" переменные объявил указателями и аллочу память на них. Пока работает.
Go to the top of the page
 
+Quote Post
Handler
сообщение Apr 20 2007, 20:19
Сообщение #39


Участник
*

Группа: Участник
Сообщений: 31
Регистрация: 5-12-06
Пользователь №: 23 156



Извените за ламерские вопросы, но все таки хочеться узнать.
1. К каким атмегам можно подрубить внешнию паметь, например к atmega32 можно?
2.Где бы прочитать, желательно на русском, про реализацию этого процесса?
Go to the top of the page
 
+Quote Post
Nanobyte
сообщение Apr 20 2007, 20:32
Сообщение #40


За битами по регистрам гоняюсь
***

Группа: Свой
Сообщений: 457
Регистрация: 24-04-06
Из: Таганрог
Пользователь №: 16 446



Цитата(Handler @ Apr 20 2007, 21:19) *
... 1. К каким атмегам можно подрубить внешнию паметь, например к atmega32 можно?
2.Где бы прочитать, желательно на русском, про реализацию этого процесса?

1) ATmega8515, ATmega162, ATmega64, ATmega128
2) http://www.gaw.ru/html.cgi/txt/doc/micros/avr/arh128/2_1.htm


--------------------
Курсор влево, курсор вправо - считается хакерством. FORMAT C: производится без предупреждения
Go to the top of the page
 
+Quote Post
Spider
сообщение Apr 25 2007, 20:42
Сообщение #41


В поисках истины
***

Группа: Свой
Сообщений: 431
Регистрация: 7-01-06
Из: Россия
Пользователь №: 12 923



А можно вернуться к моим папугаям? В смысле могу ли я использовать всю ОЗУ как одно целое, а не как "внутреняя" и "внешняя"? Точнее могу ли я сказать об этом компилятору?
Напоминаю, что пока у меня мега128и 32к внешней СОЗУ. Внутреня адресуется как обычно, а во нешнюю перенесена куча (хип).

ЗЫ. А можно, как-нить узнать объём и кол-во занятой памяти в результате работы программы? ну там переменные, их расположение и размер в куче?
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Apr 27 2007, 11:35
Сообщение #42


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



Цитата(Alexey Belyaev @ Apr 25 2007, 20:42) *
А можно вернуться к моим папугаям? В смысле могу ли я использовать всю ОЗУ как одно целое, а не как "внутреняя" и "внешняя"? Точнее могу ли я сказать об этом компилятору?
Напоминаю, что пока у меня мега128и 32к внешней СОЗУ. Внутреня адресуется как обычно, а во нешнюю перенесена куча (хип).

Всё можно. Это нужно сказать линкеру, подкорректировав соответствующий командный файл или скрипт в зависимости от среды разработки.
Цитата(Alexey Belyaev @ Apr 25 2007, 20:42) *
ЗЫ. А можно, как-нить узнать объём и кол-во занятой памяти в результате работы программы? ну там переменные, их расположение и размер в куче?

Это можно увидеть в map файле, выдаваемом линкером, включив соответствующую опцию.
Размер кучи постоянен (как и размер стека) и также задаётся скриптом линкера, а вот её занятость определить также сложно как и занятость стека.
Go to the top of the page
 
+Quote Post
Spider
сообщение Apr 27 2007, 13:18
Сообщение #43


В поисках истины
***

Группа: Свой
Сообщений: 431
Регистрация: 7-01-06
Из: Россия
Пользователь №: 12 923



Цитата(IgorKossak @ Apr 27 2007, 15:35) *
Всё можно. Это нужно сказать линкеру, подкорректировав соответствующий командный файл или скрипт в зависимости от среды разработки.

Это можно увидеть в map файле, выдаваемом линкером, включив соответствующую опцию.
Размер кучи постоянен (как и размер стека) и также задаётся скриптом линкера, а вот её занятость определить также сложно как и занятость стека.

А по подробнее в случае с WinAVR можно?
Go to the top of the page
 
+Quote Post
aesok
сообщение Apr 27 2007, 13:25
Сообщение #44


Знающий
****

Группа: Участник
Сообщений: 596
Регистрация: 26-05-06
Из: Москва
Пользователь №: 17 484



Цитата(Alexey Belyaev @ Apr 27 2007, 14:18) *
А по подробнее в случае с WinAVR можно?


Кое какая информация есть в avr-libc-user-manual в разделе 8.5 Using malloc().

Анатолий.
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Apr 27 2007, 14:18
Сообщение #45


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



Цитата(Alexey Belyaev @ Apr 27 2007, 13:18) *
А по подробнее в случае с WinAVR можно?

WinAVR не использую уже давно.
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 Текстовая версия Сейчас: 19th July 2025 - 04:43
Рейтинг@Mail.ru


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