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

 
 
 
Reply to this topicStart new topic
> sam7se и EBI вопрос
kichnamid
сообщение May 30 2011, 16:46
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 17
Регистрация: 25-01-11
Из: Москва
Пользователь №: 62 467



есть at91sam7se и 16-контроллер спецшины. 16-контроллер идет как Static Memory. ячейки/регистры в контроллере обозначаю через переменные:

usigned short X1 __at 0x1000XXX0
usigned short X2 __at 0x1000XXX2
usigned short X3 __at 0x1000XXX4
usigned short X4 __at 0x1000XXX6
например

линкер ругается на Х2 и Х4, пишет что они должны быть выровнены по 4 байта.

софт Keil. в настройках проекта thumb-режим выбран. в keil`е в опциях к проекту есть возможность указать внешние RAM/ROM в свойствах проекта, а потом указать для каждого компилируемого юнита куда "совать" переменные. но видимо, я что-то делаю не правильно. как указать, что переменная во внешней памяти? или может есть другой способ обращения к внешней памяти через EBI и SMC?
Go to the top of the page
 
+Quote Post
aaarrr
сообщение May 30 2011, 16:50
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Правильно будет прописать нужный регион и его содержимое в scatter'е и через #pragma arm section, а не через визард или __at.
Go to the top of the page
 
+Quote Post
kichnamid
сообщение Jun 1 2011, 16:05
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 17
Регистрация: 25-01-11
Из: Москва
Пользователь №: 62 467



подскажите где прочитать про это. или книжку по программированию арм в кейле.

написал ячейки как в хидерах регистры внутренние: #define <имя> *<тип> <адрес>
нужный чипселект появился, записал туда, потом считал - вроде работает.

но хочется узнать как грамотно это делать
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jun 1 2011, 16:25
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Если вкратце:

1. Добавляем в .scat регион внешней памяти.
Код
LOAD_REGION
{
    EXTSRAM 0x60000000 0x100000
    {
        * (extsram)
    }
}

Автоматическую генерацию, естественно, запрещаем.

2. Код/данные размещаем через pragma arm section, например:
Код
#pragma arm section zidata = "extsram"
__align(4) char buffer[BUFFER_SIZE];
#pragma arm section zidata


Про прагмы и скрипт линкера читать нужно в хелпе.
Go to the top of the page
 
+Quote Post
ViKo
сообщение Jun 1 2011, 16:50
Сообщение #5


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(kichnamid @ May 30 2011, 19:46) *
usigned short X1 __at 0x1000XXX0
как указать, что переменная во внешней памяти?

А что, иксы XXX можно указывать?
А так?
Код
uint16_t X1 __attribute__((at(0x10000000)));
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 02:20
Рейтинг@Mail.ru


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