Привет Всем. Решил воспользоваться профилировщиком. Создал двухсекционный counter в SOPC.
В Eclipce написал вот так:
Код
PERF_RESET(PERF_CNT_BASE);
PERF_START_MEASURING(PERF_CNT_BASE);
PERF_BEGIN(PERF_CNT_BASE, 1);
FunctionInterest(); //Здесь замеряю
PERF_END(PERF_CNT_BASE, 1);
PERF_STOP_MEASURING(PERF_CNT_BASE);
perf_print_formatted_report((void *)PERF_CNT_BASE, // Peripheral's HW base address
alt_get_cpu_freq(), // defined in "system.h"
1, // How many sections to print
"1st checksum_test" // Display-names of sections
);
Но после компиляции, линкер выдал что секции налазят одна на другую и что требуется на 12К больше памяти.
Ну хорошо, увеличил размер памяти с 65КБ до 256Кб(благо кристалл позволяет). После компиляции опять то же самое. Что за? Bsp generate сделал. Вот что выкидывает линкер:
Код
Info: Linking prj.elf
nios2-elf-g++ -T'../prj_disp2_bsp/linker.x' -msys-crt0='../prj_bsp/obj/HAL/src/crt0.o' -msys-lib=hal_bsp -L../prj_bsp -Wl,-Map=prj.map -O0 -g -Wall -mno-hw-div -mno-hw-mul -mno-hw-mulx -o prj.elf obj/GPL.o obj/src1.o obj/src2.o obj/src3.o obj/hello_world.o obj/src4.o -lm
/cygdrive/g/altera/91/nios2eds/bin/nios2-gnutools/H-i686-pc-cygwin/bin/../lib/gcc/nios2-elf/3.4.6/../../../../nios2-elf/bin/ld: region onchip_memory2_0 is full (prj.elf section .rodata). Region needs to be 12425 bytes larger.
/cygdrive/g/altera/91/nios2eds/bin/nios2-gnutools/H-i686-pc-cygwin/bin/../lib/gcc/nios2-elf/3.4.6/../../../../nios2-elf/bin/ld: section .rwdata [00080020 -> 00081b9f] overlaps section .exceptions [00080020 -> 000801d3]
/cygdrive/g/altera/91/nios2eds/bin/nios2-gnutools/H-i686-pc-cygwin/bin/../lib/gcc/nios2-elf/3.4.6/../../../../nios2-elf/bin/ld: section .bss [00081ba0 -> 00081dff] overlaps section .text [000801d4 -> 0008f72b]
collect2: ld returned 1 exit status
make: *** [prj.elf] Error 1
Я понимаю что секции перекрыты, но память то увеличил, причем на много? Какие есть соображения?
Заранее спасибо
С Уважением...