Hur kan jag få tag på prestandaversionen av Nucleo?
Re: Hur kan jag få tag på prestandaversionen av Nucleo?
Efter att du pausat måste du stega dig fram, eller köra fram till strategiskt placerade brytpunkter, för att ta reda på vad som kan tänkas vara fel. Funktionen du länkar till gör ju t.ex. en del felhantering, så du får stega dig genom den och se vad som händer.
Re: Hur kan jag få tag på prestandaversionen av Nucleo?
Ser ut som du inte nollställer IRQ flaggorna för DMA interuptet. Kolla även om det är nån anna interupt ex felflagga som sätts.
Men börja med isolera din kod, så testa ditt matrisbibliotek med en känd inputarray, ex de testkoden du körde på PC.
Efter att det funkar kan du börja testa med ADC och DMA.
Men börja med isolera din kod, så testa ditt matrisbibliotek med en känd inputarray, ex de testkoden du körde på PC.
Efter att det funkar kan du börja testa med ADC och DMA.
Re: Hur kan jag få tag på prestandaversionen av Nucleo?
Jag har hittat en kod som hela tiden körs och aldrig går vidare. Denna for-loops körs hela tiden. Ser ut som den har fastnat.
Bättre om de använde memset istället?
Bättre om de använde memset istället?
Kod: Markera allt
memset(_THIS->R, 0, NVMAX*NVMAX*sizeof(real_t))
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Re: Hur kan jag få tag på prestandaversionen av Nucleo?
Japp! Det är något med DMA som avbryter min beräkning så den börjar om. Eller har jag fel angående interrupts?Rick81 skrev:Ser ut som du inte nollställer IRQ flaggorna för DMA interuptet. Kolla även om det är nån anna interupt ex felflagga som sätts.
Men börja med isolera din kod, så testa ditt matrisbibliotek med en känd inputarray, ex de testkoden du körde på PC.
Efter att det funkar kan du börja testa med ADC och DMA.
Jag kan ju ta bort DMA från min ADC och anropa ADC:n manuellt?
Re: Hur kan jag få tag på prestandaversionen av Nucleo?
Vad är NVMAX definierad till, och vad har variabeln i för typ?
Ifall NVMAX*NVMAX är större än högsta möjliga värde på i så fastnar ju loopen.
Ifall NVMAX*NVMAX är större än högsta möjliga värde på i så fastnar ju loopen.
Re: Hur kan jag få tag på prestandaversionen av Nucleo?
Det var 50*50. Så det är lungt!
Men jag kom på att jag har en timer TIM2 som triggar min ADC att läsa till DMA rätt ofta. Kanske man ska anropa min ADC manuellt.
Men jag kom på att jag har en timer TIM2 som triggar min ADC att läsa till DMA rätt ofta. Kanske man ska anropa min ADC manuellt.
Re: Hur kan jag få tag på prestandaversionen av Nucleo?
Det beror ju på. Ifall du vill sampla med 1Msps som jag gjorde senast jag använd en STM32, så är ju DMA närmast nödvändigt. Ifall det handlar om några få mätningar per sekund finns det ingen anledning att använda DMA som jag ser det.
Re: Hur kan jag få tag på prestandaversionen av Nucleo?
1 Hz så är jag nöjd
Jag använder bara DMA för att det är enkelt. Men nu kanske man har lärt sig att det finns nackdelar också.
Jag använder bara DMA för att det är enkelt. Men nu kanske man har lärt sig att det finns nackdelar också.
Re: Hur kan jag få tag på prestandaversionen av Nucleo?
Det är lite krångligare med DMA eftersom att man behöver läsa fler kapitel i databladet och sätta sig in i hur det fungerar. Jag är inte tillräckligt hemmastadd med STM32 för att se vad som är fel vid första anblick, och jag tycker inte att du lämnar tillräckligt med info för att man ska kunna sätta sig in i ditt problem och hjälpa till att lösa det.
Men någon föreslog att provköra de olika delarna var för sig, och det tycker jag låter utmärkt. Testa att bara mäta signalen fram tills det fungerar. Och lägg sedan in matriskoden.
Men någon föreslog att provköra de olika delarna var för sig, och det tycker jag låter utmärkt. Testa att bara mäta signalen fram tills det fungerar. Och lägg sedan in matriskoden.
Re: Hur kan jag få tag på prestandaversionen av Nucleo?
Jag sitter och forskar mycket själv också.
Nu testade jag att ta bort DMA och inte anropa ADC alls. Alltså helt utan ADC funktionalitet.
Och jag gjorde en beräkning. Så här hamnade jag i koden.
Nu testade jag att ta bort DMA och inte anropa ADC alls. Alltså helt utan ADC funktionalitet.
Och jag gjorde en beräkning. Så här hamnade jag i koden.
Kod: Markera allt
/**
* @brief This function handles Hard fault interrupt.
*/
void HardFault_Handler(void)
{
/* USER CODE BEGIN HardFault_IRQn 0 */
/* USER CODE END HardFault_IRQn 0 */
while (1)
{
/* USER CODE BEGIN W1_HardFault_IRQn 0 */
/* USER CODE END W1_HardFault_IRQn 0 */
}
}
Re: Hur kan jag få tag på prestandaversionen av Nucleo?
Det där är vad jag menade från början, en sk. "trap".
Debuggern har ofta en "call history" som man kan använda som hjälpmedel för att felsöka detta.
Debuggern har ofta en "call history" som man kan använda som hjälpmedel för att felsöka detta.
Re: Hur kan jag få tag på prestandaversionen av Nucleo?
Är du bekant med Atollic?
Edit: Hittade detta.
Edit: Hittade detta.
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Re: Hur kan jag få tag på prestandaversionen av Nucleo?
Troligtvis en felaktig pekare som pekar utanför tillåtet minne.
Du har väl inbyggd st-link? så sätt ut brytpunkt på sista kända punkten och steppa därifrån för att se var det går snett.
Och ta utan ADC och DMA först, mindre felkällor = lättare debugga
Du har väl inbyggd st-link? så sätt ut brytpunkt på sista kända punkten och steppa därifrån för att se var det går snett.
Och ta utan ADC och DMA först, mindre felkällor = lättare debugga
Re: Hur kan jag få tag på prestandaversionen av Nucleo?
Jag gjorde en komplett debugg med "stop points" och hittade absolut inget. Allt gick som smör när jag stegade mig frammåt. Men kör jag koden normalt, så får jag hard fault error.
Re: Hur kan jag få tag på prestandaversionen av Nucleo?
Titta på call-stacken vad som orsakade din trap.