2016-12-21 15 views
1

여기
Libopencm3 interrupt table on STM32F4
이 질문에 대한 대답은 잘 전체 메커니즘을 설명하지만 내가 얻을 것은 차단 핸들러 가득 전체 벡터 테이블입니다.LibOpenCM3 벡터 테이블은 모두 차단 핸들러

나는 디버거에서 보았 기 때문에 (모든 것이 작동하지 않는 것을 제외하면) : disassembly screenshot showing vector table.

링커는 단순히 내 잘 정의 된 인터럽트 핸들러 예를 들어, 기능 (들), 무시 것처럼입니다

void sys_tick_handler(void) 
{ 
... 
} 

void tim1_up_isr(void) 
{ 
... 
} 

을 내가 EmBitz IDE를 사용하고 있습니다 및 libopencm3 일하러 가야하는이 튜토리얼 here을 따랐다 (그것은 않습니다 이 문제를 제외한 작업).

나는 함수 이름을 n 배로 확인했으며 libopencm3 예제 프로젝트의 예제를 포함하여 몇 가지 온라인 예제를 시도했다.

모든 것이 디버그없이 컴파일되고 대상 보드 (STM32F103C8)에로드되어 잘 실행됩니다. ISR이 호출되지 않는다면 (인터럽트가 발생하지만 블로킹 핸들러에서 멈추게됩니다.)

왜 이런 일이 발생했는지 알 수 있습니까?

+0

libopencm3-examples에서 프로젝트를 빌드하고 실행할 때 동일한 문제가 발생 했습니까? 그렇다면 어떻게 구축하고 있습니까? 해당 프로젝트 디렉토리에서'make'를 실행하면됩니까? 그리고 어떤 OS를 사용하고 있습니까? –

+0

@ Sam, 질문에 언급 된대로 EmBitz IDE를 사용하고 있습니다. Win 7 VM에서 실행 중이지만 어떻게 관련이 있는지 알 수 없습니다. EmBitz 문제 일 수 있습니까? – spacer

답변

0

ST의 SPL 또는 HAL의 표준 벡터 테이블과 연결되는 것처럼 보입니다.

것은이를 확인하려면 sys_tick_handler()tim1_up_isr()SysTick_Handler()TIM1_UP_IRQHandler()로 이름을 변경하려고합니다.

이 경우 SysTick_HandlerTIM1_UP_IRQHandler (내 생각에 이는 startup*.s) 파일을 찾아 프로젝트에서 삭제하십시오.

+0

'sys_tick_handler()'의 이름을'SysTick_Handler()'로 바꿀 때 작동합니다. 'SysTick_Handler' 심볼은 스타트 업 코드와 벡터 테이블 정의가 들어있는 "startup_stm32f10x_md.s"파일에서만 사용됩니다 -이 파일을 지우라고 하시겠습니까? – spacer

+0

사실 이것은 "Startup_stm32f10x_md.s"파일은 SysTick_Handler 심볼을 사용하여 벡터 테이블을 채 웁니다.하지만 심볼은 해당 파일에서 (블로킹 핸들러로) ** 및 ** 정의되어 있습니다 ** 그것과'sys_tick_handler' 심볼 사이에는 아무런 링크가 없으므로 작동하지 않는 것은 당연합니다. 이 튜토리얼은 모두 LibOpenCM3의 "vector_nvic.c"파일을 제거하고 시동 파일을 소개하는 [link] (https://github.com/OliviliK/STM32F103/wiki/Tutorial2_LOCM3Template)에서 나온 것입니다. 벡터 테이블 자체를 정의). – spacer

+0

OK, "startup_stm32f10x_md.S"파일의 시작 부분에 #include (#define의 IRQ 핸들러 대체 이름 만 포함)를 추가하고, #define SysTick_Handler sys_tick_handler' (어떤 이유로 "irqhandlers.h"에 정의되지 않았기 때문에) 프로젝트 옵션 ("C : \ CommonLibs \ libopencm3 \ include \ libopencmsis \ stm32 \ f1")에 다른 검색 경로를 추가하십시오. – spacer