2016-12-21 8 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-examplesプロジェクトのものを含むいくつかのオンラインの例を試しました。

すべてがコンパイルされ、ターゲットボード(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"ファイルを削除することを示唆しているスタートアップファイルを紹介するチュートリアルから来たものです(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

関連する問題