我目前工作的一個PWM調製器以「模擬」汽車發動機點火減刑。然後,我將使用它來驅動另一個處理從原始信號(引擎的換向器)轉換爲乾淨輸出電壓的微控制器,並通過RPM計數器的檢流計。愛特梅爾/ Arduino的:ISR(TIMER0_OVF_vect)將無法編譯(「第一定義」中__vector_16)
這個項目對我來說也是學習如何有在我的微控制器更好的控制的藉口。
嗯,我寫了一個小程序,用定時器0(8位),我需要觸發兩個中斷服務程序(ISR):
- TIMER0_OVF_vect:溢出中斷
- TIMER0_COMPA_vect:上比較火
我有以下功能:
void configureTimer0(parameters)
{
cli();
// Some maths
TCCR0A = (1<<WGM01) | (1<<WGM00); // I tried to use the "Fast PWM" waveform generation mode
TCCR0B &= 0b00110000; // 5th and 4th bits are reserved. Every other bits is set to 0.
TCNT0 = 0; // Initialize counter value to 0
TCCR0B |= select_prescaler(prescaler); // Custom function to determine the right prescaler
OCR0A = ext_OnTicks; // Output compare register is set to a predetermined numbers of ticks
// Enabling overflows interrupt:
TIMSK0 |= (1 << TOIE0);
sei(); // Enable interrupts
}
然後,在某些情況下,根據情況將TIMSK0中的OCIE0位置ON和OFF。 但是,溢出中斷始終處於啓用狀態。
當我嘗試編譯,我結束了這些錯誤:
"C:\Users\UTILIS~1\AppData\Local\Temp\arduino_build_8383\sketch\PWM_modulator.ino.cpp.o" "C:\Users\UTILIS~1\AppData\Local\Temp\arduino_build_8383/..\arduino_cache_395570\core\core_arduino_avr_uno_a94ab6aaf61dfb93b4a8079c694a14c2.a" "-LC:\Users\UTILIS~1\AppData\Local\Temp\arduino_build_8383" -lm
wiring.c.o (symbol from plugin): In function `__vector_16':
(.text+0x0): multiple definition of `__vector_16'
C:\Users\UTILIS~1\AppData\Local\Temp\arduino_build_8383\sketch\PWM_modulator.ino.cpp.o (symbol from plugin):(.text+0x0): first defined here
collect2.exe: error: ld returned 1 exit status
exit status 1
Erreur de compilation pour la carte Arduino/Genuino Uno // Compilation error for Uno board (French)
我試圖與ISR(TIMER0_COMPB_vect),而不是ISR(TIMER0_OVF_vect)編譯,和它的作品,但實際上它不是重點我的程序。
我還試圖ISR(TIMER2_OVF_vect),它是一個8位的定時器,以及。我可以同步Timer0和Timer2以達到所需的效果,但我認爲這樣做並不十分乾淨(並且它阻止了我使用Timer2功能)。
也有一些是錯誤的,我的代碼,但不明白的地方的錯誤是隱藏。 絕對有一些與wiring.c.o文件相關的東西。
PS:自問題出現以來,我一直在尋找解決方案很長一段時間,但我找不到任何方式正確地向Google詢問Stack Overflow站點。 道歉,如果我錯過了正確的搜索字符串!
它看起來像處理'ISR(TIMER0_OVF_vect)測試'在多個地方被定義。 –