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

 
 
> Использование в Keil Region-related symbols
VadimNic_nt
сообщение Oct 10 2017, 15:34
Сообщение #1


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

Группа: Участник
Сообщений: 80
Регистрация: 25-10-09
Из: Екатеринбург
Пользователь №: 53 194



Здравствуйте Все!

Хотелось бы разобраться с использованием Linker-defined symbols в проекте Keil.
http://www.keil.com/support/man/docs/armli...62065951495.htm

Меня конкретно интересует возможность использования переменной Load$$LR$$load_region_name$$Length
http://www.keil.com/support/man/docs/armli...62065953823.htm

Почему при сборке проекта линковщик выдает ошибку, что символ не определен....
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 6)
x893
сообщение Oct 10 2017, 16:18
Сообщение #2


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

Группа: Свой
Сообщений: 1 333
Регистрация: 27-10-08
Из: Планета Земля
Пользователь №: 41 226



Берете и используете
Код
extern uint32_t * Load$$LR$$LR_IROM1$$Length;
...
{
  uint32_t * r = Load$$LR$$LR_IROM1$$Length;
}


Видимо не те буквы используете, поэтому и не находит.
Go to the top of the page
 
+Quote Post
VadimNic_nt
сообщение Oct 10 2017, 16:30
Сообщение #3


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

Группа: Участник
Сообщений: 80
Регистрация: 25-10-09
Из: Екатеринбург
Пользователь №: 53 194



Спасибо, действительно линкуется без ошибок.
А эти переменные обязательно использовать через указатель?
Go to the top of the page
 
+Quote Post
x893
сообщение Oct 10 2017, 16:51
Сообщение #4


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

Группа: Свой
Сообщений: 1 333
Регистрация: 27-10-08
Из: Планета Земля
Пользователь №: 41 226



Лень проверять.
Go to the top of the page
 
+Quote Post
VadimNic_nt
сообщение Oct 10 2017, 18:31
Сообщение #5


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

Группа: Участник
Сообщений: 80
Регистрация: 25-10-09
Из: Екатеринбург
Пользователь №: 53 194



Для проверки использовал следующий код:

/*----------------------------------------------------------------------------
Main Program
*----------------------------------------------------------------------------*/
int main (void) { /* main entry for program */

uint32_t test[4];
extern uint32_t Load$$LR$$LR_IROM1$$Limit;
extern uint32_t Load$$LR$$LR_IROM1$$Base;
extern uint32_t Load$$LR$$LR_IROM1$$Length;

......

test[0] = (uint32_t)&Load$$LR$$LR_IROM1$$Limit;
test[1] = (uint32_t)&Load$$LR$$LR_IROM1$$Base;
test[2] = (uint32_t)&Load$$LR$$LR_IROM1$$Length;

test[3] = test[0] - test[1];

....

}
Go to the top of the page
 
+Quote Post
ViKo
сообщение Oct 10 2017, 18:42
Сообщение #6


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

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



А результат проверки - какой?
Здесь главное extern.
Go to the top of the page
 
+Quote Post
VadimNic_nt
сообщение Oct 10 2017, 18:49
Сообщение #7


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

Группа: Участник
Сообщений: 80
Регистрация: 25-10-09
Из: Екатеринбург
Пользователь №: 53 194



Все работает.

Кроме extern необходимо использовать &

6.3.7 Methods of importing linker-defined symbols in C and C++

You can import linker-defined symbols into your C or C++ source code. They are external symbols and you must take the address of them.
The only case where the & operator is not required is when the array declaration is used, for example extern char symbol_name[];.


http://www.keil.com/support/man/docs/armli...62065956104.htm
Go to the top of the page
 
+Quote Post

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

 


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


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