[IAR] как я могу распечатать начало конечного адреса раздела?
1. Создаю кастомный раздел для myTest в.icf
define symbol __ICFEDIT_region_TEST_start__ = (0x10080000);
define symbol __ICFEDIT_region_TEST_end__ = (0x100DFFFF);
define region TEST_region = mem:[from __ICFEDIT_region_TEST_start__ to __ICFEDIT_region_TEST_end__];
place at start of TEST_region {section .test_cases_entries};
2. Я кодирую тест в test.c
#pragma section = ".test_cases_entries"
void pfm_test_cases_init(void)
{
struct pwb_altest_desc *start,*stop;
start = __section_begin(".test_cases_entries");
stop = __section_end(".test_cases_entries");
printf("test section start = %x \n\r",start);
printf("test section end = %x \n\r",stop);
}
- результат ответ
test section start = 0
test section end = 0
- ожидаем результата: начало раздела 0x10080000? конец раздела 0x100DFFFF?
1 ответ
__section_begin(".section")
а также __section_end(".section")
будет 0, если нет части раздела .section
включен в окончательный двоичный файл. В вашем случае вы сначала должны убедиться, что раздел.test_case_entries
не пусто, т.е. какой-то модуль в вашем проекте помещает данные в этот раздел. Затем вам нужно заставить компоновщик включить эти данные в окончательный двоичный файл. Это делается либо путем ссылки на данные в каком-либо модуле (__section_begin
а также __section_end
не учитывается), объявите данные как __root
, или используя --keep
в командной строке компоновщика.
Ниже приведена тестовая программа, которая работает на моей машине. Обратите внимание, что файл.icf не является полным, поскольку большая его часть зависит от вашей целевой системы.
test.c:
#include <stdio.h>
// Make the compiler recognize .section as a section for __section_begin and
// __section_end.
#pragma section = ".section"
void main(void)
{
// Find the start and end address of .section
int *start = __section_begin(".section");
int *stop = __section_end(".section");
printf("section start = %x \n", start);
printf("section end = %x \n", stop);
}
// Put data in .section and make the data root to ensure is is included.
// This can be in a different file.
#pragma location=".section"
__root int data[100];
Часть test.icf
define symbol TEST_start = (0x10080000);
define symbol TEST_end = (0x100DFFFF);
define region TEST_region = mem:[from TEST_start to TEST_end];
place at start of TEST_region {section .section};