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

 
 
 
Reply to this topicStart new topic
> размещение переменной по фиксированному адресу, Keil
*SERG
сообщение Feb 20 2008, 11:41
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 274
Регистрация: 10-08-05
Из: Екатеринбург
Пользователь №: 7 517



Пишу в KEIL (не долго), очень нужно указать переменной по какому адресу ей располагаться. В СИ вроде таких функций нет, только указатели, но они делают "обратное". Каким образом поступить? Может линкеру как то указать, где расположить переменную? Или асм вставку?Помогите плиз help.gif

ЗЫ. раньше видел такие темы, но щас найти не смог и поиск по форуму молчит.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Feb 20 2008, 12:00
Сообщение #2


Гуру
******

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



Смотрим FAQ, читаем в мануале раздел Using Scatter-loading Description Files.
Go to the top of the page
 
+Quote Post
KRS
сообщение Feb 20 2008, 12:01
Сообщение #3


Профессионал
*****

Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555



Цитата(*SERG @ Feb 20 2008, 14:41) *
только указатели, но они делают "обратное"

что значит обратное?

если вы хотите обращаться по определенному адресу и использовать только стандартный С, самое простое определить макрос.
примерно так
Код
#define var_at_addr (*((unsigned*)0x1230))
unsigned val;
val = var_at_addr;
var_at_addr = val+1;

если это регистр переферии то volatile вставить в макрос
Go to the top of the page
 
+Quote Post
VAI
сообщение Feb 20 2008, 13:29
Сообщение #4


Профессионал
*****

Группа: Модераторы
Сообщений: 1 120
Регистрация: 17-06-04
Пользователь №: 37



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

Вот цитата из имеющегося у Вас файла ...\Keil\ARM\Hlp\Release_Notes.htm
Цитата
Added __at keyword that allows to locate constants on absolute addresses.

C Example: The following example will locate a section to address 0x1F00:
Код
#include <absacc.h>

const char MyText[] __at (0x1F00) = "TEXT AT ADDRESS 0x1F00";

Assembler Example: In assembler files you may define the location using section names composed of |.ARM.__AT_<addr>|. The following example will locate a section to address 0xFFE0:
Код
     AREA |.ARM.__AT_0xFFE0|, CODE, READONLY

Откройте этот файл и посмотрите, там в изменениях на версию 3.03а это написано.
Это может быть Вам отправной точкой для дальнейшего поиска более подробной информации в документации, хотя то, о чем Вы спрашивали, уже имеется в примере.
Можно поискать в ...\Keil\ARM\Hlp\armccref.chm по ключевому слову __at


--------------------
Если зайца бить, его можно и спички научить зажигать
Сколько дурака не бей - умнее не будет. Зато опытнее
Go to the top of the page
 
+Quote Post
*SERG
сообщение Feb 21 2008, 21:13
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 274
Регистрация: 10-08-05
Из: Екатеринбург
Пользователь №: 7 517



VAI благодарю!!!Всё получилось!!!
Go to the top of the page
 
+Quote Post

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

 


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


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