Infineon Tricore 27x Block Diagram을 확인해 보면 각각의 메모리가 CPU와 어떤식으로 연결되어 사용되는지 확인 가능하다.
각각의 CPU 와 메모리 종류별 수행시간 차이를 분석해 보자.
한가지 방법으로 T32의 RunTime 기능을 사용해 수행 시간을 비교할 수 있다.(여러 방법이 있다.)
가지고있는 제어기 TC297Tx는 코어가 3개 이므로 Core0에서만 작동하도록 셋팅 하였다.
데이터 섹션 한정자 종류
하기 이미지와 같이 자료형(int)와 변수명 사이에 한정자를 입력해 사용할 수 있다.
여기서 __at(0x90000000) tc0_far_var0는 'Segment 9'에 포함되는 주소이므로 LMURAM에 선언되도록 설정 한 것이다.
하기 테이블을 참조하자.
수행 소스코드는 간단하게 자기 자신에 100을 더한다. (Printf나 이외 라이브러리 함수는 특정 Core나 Flash에 존재할 수있으므로 정확한 변수 테스트를 진행하기 위해서는 해당 변수를 사용하는 연산으로 Test해야한다.)
- tc0_far_var0 = tc0_far_var0 + 100;
F9000091 main: movh.a a15,#0x9000
0F48 ld16.w d15,[a15]0x0
- tc0_near_var1 = tc0_near_var1 + 100;
00007F85 ld.w d15,0x70000000
- a0_var2 = a0_var2 + 100;
08000F19 ld.w d15,[a0]-0x8000
각각 지정한 위치에 잘 할당되서 사용된 것을 확인 할 수 있다.
이제 각 변수 별 연산 수행시간을 비교할 차례이다. 하기 링크에 들어가 보면 Breakpoint로 수행시간을 확인할 수 있는 방법이 잘 나와 있다.
tc0_far_var0 수행시간은 408.000us 이다. 아무래도 LMU를 사용하기 때문에 소요 시간이 많이 걸리고 메모리 호출도 2회로 a0, near에 비해 assembly 호출이 많다.
tc0_near_var1 의 수행시간은 368.100us 이다. CPU와 근접한 메모리이고 호출도 1회 이기때문에 수행시간이 far에 비해 짧다.
a0_var2 의 수행시간은 385.300us 이다. 레지스터 접근이 제일 빠른것으로 아는대 near보다 많은 시간이 소요 되었다. 이것은 아마 Test Case나 구현 로직에 따라 다를 수 있다.
본 실험은 MCU 코어나 Compiler, Linker, Assemble 설정에 따라 다를 수 있으므로 참고만 하면 좋겠다.
하기 동영상은 수행시간 Test 영상이니 참고하길 바란다.
'programmer > Embedded' 카테고리의 다른 글
Linker Section에 따른 메모리 매핑 공간 3 (0) | 2020.07.27 |
---|---|
Tasking사용 Infineon linker script 분석 1 (0) | 2020.07.27 |
Ubuntu 16.4 LTS 에서 Ubuntu 18.4 LTS 변경시 유의 (0) | 2020.04.14 |
TC297TA Triboard 를 사용해 LED를 점등해 보자 (0) | 2020.03.30 |
Target 의 elf 위치 설정(Hightech IDE) (0) | 2020.03.27 |