ARM Cortex-M4 프로세서와 함께 STM32F429를 사용하고 있습니다. 나는 ARM 어셈블리를 모른다는 것을 전제로하지만, 코드를 최적화해야한다. 내가 필요하지만,이 솔루션은 코어 텍스 A8을 위해입니다C에서 ARM Cortex-M4 프로세서의 경과 시간을 측정하는 방법은 무엇입니까?
How to measure program execution time in ARM Cortex-A8 processor?
의 솔루션을 읽어 보시기 바랍니다. 충동, 나는 내 코드에 위의 링크의 코드를 구현하려하지만 난이 시점에서 SEGV을 구하십시오
가 어떻게 ARM 코어 텍스 M4에서 수행이 어셈블리 코드를 조정할 수 있습니다
if (enable_divider)
value |= 8; // enable "by 64" divider for CCNT.
value |= 16;
// program the performance-counter control-register:
asm volatile ("MCR p15, 0, %0, c9, c12, 0\t\n" :: "r"(value)); /*<---Here I have SEGV error*/
// enable all counters:
asm volatile ("MCR p15, 0, %0, c9, c12, 1\t\n" :: "r"(0x8000000f));
// clear overflows:
asm volatile ("MCR p15, 0, %0, c9, c12, 3\t\n" :: "r"(0x8000000f));
?
안녕하세요. Chris. 나는 링크에 대한 대답을 읽었다. Throwback1986에 의해 주어진 다른 링크에서, 그는 DWT_CYCCNT를 사용할 것을 제안합니다. 승인. 하지만, 솔루션을보고, 내 코드 (내 질문의 코드를 사용하여) 구현하는 방법을 이해하지 않습니다. 실례합니다. ARM 프로세서의 어셈블리에 초보자입니다. ( – Anth
대부분의'MCR p15' 명령은 ** 사용자 모드 **에 있지 않다고 가정합니다 ** 또한 CPU 용이라면 괜찮습니다; 대부분의'MCR p15' 명령은 CPU (Cortex-M 또는 Cortex-M3)에만 해당해야합니다. –
SEGV (하드 포일이라고 가정)는 클럭 전원을 켜지 않고도 일부 하드웨어에 액세스했기 때문일 수 있습니다. ARM은 마이크로 컨트롤러가 저전력 모드에서 작동한다는 것을 알아야합니다. 즉, 주변 장치를 직접 켜야한다는 의미입니다. 먼저 전원을 켜지 않고 주변 장치에 액세스하면 예외가 발생합니다 (예 : 내 대답 아래에 내 대답에 언급 한 설명서를 참조하십시오. –