Я использую LCDK C6748 из Texas Intruments с Code Composer Studio и TMDSEMU100V2U-14T - XDS100v2 USB JTAG эмулятора.точки останова внутри прерывания C
LCDK поставляется с множеством функций поддержки, включая функцию, которая инициализирует плату и определяет, какие функции обратного вызова вызываются для каждого прерывания.
Я только что реализовал функцию обратного вызова, поэтому он делает что-то, когда новый образец поступает из АЦП.
Я попытался установить контрольную точку внутри прерывания, но во время выполнения программы поток не попадал туда.
Кроме того, я сделал что-то проще:
volatile int flag = 0;
interrupt void interrupt4(void) // interrupt service routine
{
flag = 1;
return;
}
int main(){
// board initializing function, defining sampling rate etc.
L138_initialise_intr(FS_48000_HZ,ADC_GAIN_0DB,DAC_ATTEN_0DB);
while(1){
if (flag == 1){
printf("interrupt entered");
flag = 0;
}
}
}
, но с какой-либо причине цикл в то время был введен только один раз.
это меня удивило, потому что, если я не установил точку останова, прерывание вводится непрерывно. Я попытался просто передать образцы в линию громкоговорителей, не делая ничего другого, и я услышал музыку.
У меня такое ощущение, что я пропускаю что-то очень важное о прерываниях, я совершенно новичок в этой теме.
Может кто-то пожалуйста, объясните мне [или мне ссылку на хороший источник, который объясняет, как mechnism работает в DSP]:
1) почему мы не можем установить контрольную точку внутри прерывания?
2) почему даже если я установил точку останова в основном, кажется, что прерывание не происходит, и если я этого не сделаю.
3) каким образом я должен иметь доступ к переменным во время выполнения, в CCS?
благодаря
Очевидное, что для меня все равно, что вы должны вводить цикл while, если флаг 'flag == 1' является истинным, на протяжении всей программы. Тогда возникает вопрос, уверены ли вы в том, что область «volatile int flag» действительно глобальна? Вы подтвердили, что поток выполнения _always_ возвращается из 'L138_initialise_intr'? – ryyker
как реализация обратного вызова, так и основной находятся в одном файле .c и объявлен флаг: volatile int flag = 0; в голове его –
Можете ли вы разместить соответствующие части своего обратного вызова? (все это, если оно не слишком велико). Если вы установите флажок = flag, то может возникнуть возврат к ошибке. Это было бы причиной того, что вы никогда не вводите 'while (...)' в 'main()'. – ryyker