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

 
 
> Как обратиться к значению директивы EQU, из c-модуля к EQU, описанному в *.s
yurmala
сообщение Sep 9 2011, 05:02
Сообщение #1


Участник
*

Группа: Свой
Сообщений: 65
Регистрация: 9-02-11
Из: Трехгорный
Пользователь №: 62 814



В startup.s описана директива:
Код
SW_VER          EQU     0x01000001

Можно ли из основной программы обратиться к этому значению?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 7)
Сергей Борщ
сообщение Sep 9 2011, 05:54
Сообщение #2


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



CODE
startup.s:

                   public SW_VER
SW_VER          EQU     0x01000001

test.c:

extern int SW_VER;
void test()
{
  printf("version: %x", SW_VER);
}
как-то так. Вы не указали ассемблер, поэтому уточните по его описанию формат директивы public.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Sep 9 2011, 07:59
Сообщение #3


Гуру
******

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



Под EQU память не выделяется, соответственно, extern int сработать бы не должен.
А вот DCD (в т.ч. с инициализацией через EQU) точно можно будет "зацепить" снаружи.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Sep 9 2011, 10:39
Сообщение #4


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (aaarrr @ Sep 9 2011, 10:59) *
Под EQU память не выделяется, соответственно, extern int сработать бы не должен.
Да, прошляпил это как-то. Тогда так:
CODE
test.c:

extern int SW_VER;
void test()
{
  printf("version: %x", (int)&SW_VER);
}



--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
yurmala
сообщение Sep 12 2011, 05:34
Сообщение #5


Участник
*

Группа: Свой
Сообщений: 65
Регистрация: 9-02-11
Из: Трехгорный
Пользователь №: 62 814



Использую компилятор Keil.

Вариант:
test.s
Код
SW_VER          EQU     0x02020001
SWVER           DCD     SW_VER

test.c
Код
extern int SWVER;
...
sprintf(s,"version: %x", SWVER);


не компилируется. Ошибка Error: L6218E: Undefined symbol SWVER

p.s. (int)&SWVER тоже пробовал
Go to the top of the page
 
+Quote Post
Rst7
сообщение Sep 12 2011, 06:07
Сообщение #6


Йа моск ;)
******

Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610



QUOTE
Вариант ... не компилируется. Ошибка Error: L6218E: Undefined symbol SWVER


PUBLIC SW_VER кто будет добавлять?


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Sep 12 2011, 06:57
Сообщение #7


Гуру
******

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



В данном случае EXPORT SW_VER.
Go to the top of the page
 
+Quote Post
yurmala
сообщение Sep 12 2011, 08:46
Сообщение #8


Участник
*

Группа: Свой
Сообщений: 65
Регистрация: 9-02-11
Из: Трехгорный
Пользователь №: 62 814



Да, уже разобрался сам. Спасибо!
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 06:55
Рейтинг@Mail.ru


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