Jump to content

    

Использование в Keil Region-related symbols

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

 

Хотелось бы разобраться с использованием 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

 

Почему при сборке проекта линковщик выдает ошибку, что символ не определен....

 

Share this post


Link to post
Share on other sites

Берете и используете

extern uint32_t * Load$$LR$$LR_IROM1$$Length;
...
{
  uint32_t * r = Load$$LR$$LR_IROM1$$Length;
}

 

Видимо не те буквы используете, поэтому и не находит.

Share this post


Link to post
Share on other sites

Спасибо, действительно линкуется без ошибок.

А эти переменные обязательно использовать через указатель?

Share this post


Link to post
Share on other sites

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

 

/*----------------------------------------------------------------------------

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];

 

....

 

}

 

Share this post


Link to post
Share on other sites

А результат проверки - какой?

Здесь главное extern.

Share this post


Link to post
Share on other sites

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

 

Кроме 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

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this