Microchip MDD. Problem med filnamn.

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 46989
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Re: Microchip MDD. Problem med filnamn.

Inlägg av TomasL »

Han använder fel funktion FSOpen tillåter endast 8+3 och ASCII.
Enligt API-dokumentationen skall man använda wFSOpen.
Användarvisningsbild
Zajber
Inlägg: 451
Blev medlem: 19 oktober 2009, 22:07:16
Skype: Andreas.fridh85
Ort: Rödön
Kontakt:

Re: Microchip MDD. Problem med filnamn.

Inlägg av Zajber »

TomasL skrev:FSOpen tillåter enbart 8.3 i ascii, inget annat.
Skall du använda LFN/16 så är det den andra funktionen som gäller.
Sedan innebär normal felsökning alltid, back to the bones.
Detta sk "eviga behov" underlättar felsökning.
Det är samma fel med wFSfopen som med FSfopen. Även om det är 8.3 eller ej.

Filnamnen har nu endast ett (1) tecken ingen filändelse ens. Och nu ger den upp redan då fil nummer tre skall skapas.
Användarvisningsbild
Icecap
Inlägg: 26652
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Re: Microchip MDD. Problem med filnamn.

Inlägg av Icecap »

Problemet är alltså inte filnamnen men antal filer som jag förstår det. Detta låter för mig som något minnesproblem, kanske det ska avsättas en viss mängd minne per fil för att rutinen kan fungera ordentligt och detta är inte avsatt.
Nerre
Inlägg: 27235
Blev medlem: 19 maj 2008, 07:51:04
Ort: Upplands väsby

Re: Microchip MDD. Problem med filnamn.

Inlägg av Nerre »

Stänger du filerna ordentligt innan du öppnar en ny? Kan vara gamla "file handles" som ligger kvar och tar plats och gör att minnet tar slut?
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Microchip MDD. Problem med filnamn.

Inlägg av sodjan »

> Och nu ger den upp redan då fil nummer tre skall skapas.

Är det fil nummer tre under samma session med applikationen?
Vad händer om du startar programmet från scratch mot en enhet
som redan har tre filer? Lägger det av direkt då? Eller kan du skapa
tre filer varje gång programmet körs oavsett att det finns tidigare filer?
Användarvisningsbild
Zajber
Inlägg: 451
Blev medlem: 19 oktober 2009, 22:07:16
Skype: Andreas.fridh85
Ort: Rödön
Kontakt:

Re: Microchip MDD. Problem med filnamn.

Inlägg av Zajber »

Det är någon märklig kombo av hur långa filnamnen är i samband med hur många filer som existerar i mappen.
Kortare filnamn = fler filer i samma mapp
Längre filnamn = mindre filer i samma mapp.

Jag skall trippelkolla stängningen av filerna när jag får möjlighet igen. Men de första filerna stängs ordentligt. :/

Jag har bara en fil-pekare öppen per gång. Jag kanske ska testa att skapa en parallel för den filen som har ett långt filnamn så att dessa inte kan krocka på något sätt.

Lagrandet av dessa filer sker i en timer interrupt som jag börjar misstänka tar för lång tid att köra. Men detta är bara vilda spekulationer just nu. Har inte bekräftat detta helt än, men det känns spontant som att ju mer jag provar att skriva till filen desto mindre filnamn måste jag använda.

Det blev lite panik nu idag då vi måste lämna detta projekt ett par veckor för att åka tillbaka till Göteborg för att redovisa resultatet av detta examensarbete redan i morgon. Så detta kommer att bli lite släpande nu fram tills nästa gång vi får tillgång till utrustningen igen.

Om någon är intresserad av att se bitar av koden så kan jag posta lite bitar på pastebin.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Microchip MDD. Problem med filnamn.

Inlägg av sodjan »

> ...så kan jag posta lite bitar på pastebin.

Är det för att man får någon slags åtkomstkontroll där?
Eller varför inte använda forumet? En ZIP fil med det
rellevanta som den intresserade kan kolla... :-)
Användarvisningsbild
Zajber
Inlägg: 451
Blev medlem: 19 oktober 2009, 22:07:16
Skype: Andreas.fridh85
Ort: Rödön
Kontakt:

Re: Microchip MDD. Problem med filnamn.

Inlägg av Zajber »

Jag gillar pastebins färgsystem, blir lättare att överskåda många rader.

Kod: Markera allt

// Information om vilken fil som arbetas med just nu!
			strcpy(filename_string,"INFO.txt");
			convert_filename(filename_string, loop_filename_fat32);
	
			pointer = wFSfopen ((const unsigned short int * )&loop_filename_fat32[0], "w");
			
			if (pointer == NULL) // Kan inte öppna filen.
			while(1);

			append_line_to_file("File information, LOOPLOGGING: ");
			append_line_to_file((char *)ascii_enter);
			
			append_line_to_file(" Current working file: ");
			int_to_string(loop_file_current,string_temp);
			append_line_to_file(string_temp);
			append_line_to_file((char *)ascii_enter);

			append_line_to_file("Total samples: ");
			sprintf(string_temp,"%lld",samples_total); 
			append_line_to_file(string_temp);

			// Avsluta med ett entertecken.
			append_line_to_file((char *)ascii_enter);
		
			append_line_to_file("Total days sampled: ");
			int_to_string(total_days_sampled,string_temp);
			append_line_to_file(string_temp);
			append_line_to_file((char *)ascii_enter);
			
			if (FSfclose (pointer))
			while(1);
			// -------------------------------------------------

			// Dag av loop
			sprintf(loop_filename_string,"%u",loop_file_current);

			//strcat(loop_filename_string,".dat");					// Fil‰ndelse

			// Konverterar filnamn till korrekt format fˆr FAT.
			convert_filename(loop_filename_string, loop_filename_fat32);

			//pointer = FSfopen (loop_filename_string, "w");
			
			pointer = wFSfopen ((const unsigned short int * )&loop_filename_fat32[0], "w");
			
			if (pointer == NULL) // Kan inte ˆppna filen.
			while(1);
			
			sprintf(string_temp,"File start sample: %lu",samples_total);
			append_line_to_file(string_temp);

			sprintf(string_temp,"Current working file: %u",loop_file_current);
			append_line_to_file(string_temp);
			
			append_line_to_file((char *)ascii_enter);
			
			get_date();
	
			sprintf(string_temp,"Start date: 20%02u %02u %02u",date[0],date[1],date[2]);
			append_line_to_file(string_temp);
			append_line_to_file((char *)ascii_enter);

			get_time();

			sprintf(string_temp,"Start time: %02u:%02u:%02u",time[0],time[1],time[2]);
			append_line_to_file(string_temp);
			append_line_to_file((char *)ascii_enter);

			file_open=1;
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 46989
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Re: Microchip MDD. Problem med filnamn.

Inlägg av TomasL »

Du får med största sannolikhet ett "General Exception".
Har du lagt till kod för att hantera detta, exempel finns både på uChips forum och i PIC32 dokumentationen.

Hur ser interrupthanteraren ut.
Användarvisningsbild
Zajber
Inlägg: 451
Blev medlem: 19 oktober 2009, 22:07:16
Skype: Andreas.fridh85
Ort: Rödön
Kontakt:

Re: Microchip MDD. Problem med filnamn.

Inlägg av Zajber »

Jag har inget som hanterar ett general exception.

Kod: Markera allt

    // enable multi-vector interrupts
    INTEnableSystemMultiVectoredInt();

Kod: Markera allt

void __ISR(_CORE_TIMER_VECTOR, ipl2) CoreTimerHandler(void)
Sen har jag inga fler interrupthandlers.

Varför får jag ett general exception?
Användarvisningsbild
Zajber
Inlägg: 451
Blev medlem: 19 oktober 2009, 22:07:16
Skype: Andreas.fridh85
Ort: Rödön
Kontakt:

Re: Microchip MDD. Problem med filnamn.

Inlägg av Zajber »

Har lagt till en handler för general exceptions men den tar aldrig felet.
Användarvisningsbild
Zajber
Inlägg: 451
Blev medlem: 19 oktober 2009, 22:07:16
Skype: Andreas.fridh85
Ort: Rödön
Kontakt:

Re: Microchip MDD. Problem med filnamn.

Inlägg av Zajber »

Varje gång jag kortar ned koden som skriver till filen så kan jag köra längre.

Nu känns det mer och mer som att den inte hinner klart skrivningen innan nästa interrupt kommer.
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 46989
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Re: Microchip MDD. Problem med filnamn.

Inlägg av TomasL »

Du måste stänga av interrupten, köra koden, slå på dem igen.
Användarvisningsbild
Zajber
Inlägg: 451
Blev medlem: 19 oktober 2009, 22:07:16
Skype: Andreas.fridh85
Ort: Rödön
Kontakt:

Re: Microchip MDD. Problem med filnamn.

Inlägg av Zajber »

Jag måste köra detta med 10Hz. Så därför slår jag på interrupten direkt när den börjar.

Kod: Markera allt

void __ISR(_CORE_TIMER_VECTOR, ipl2) CoreTimerHandler(void)
{

	Nop();
	
	    // clear the interrupt flag
    mCTClearIntFlag();
    UpdateCoreTimer(core_tick_rate);
	
Användarvisningsbild
Zajber
Inlägg: 451
Blev medlem: 19 oktober 2009, 22:07:16
Skype: Andreas.fridh85
Ort: Rödön
Kontakt:

Re: Microchip MDD. Problem med filnamn.

Inlägg av Zajber »

Nu tror jag att det är löst!!!


Kör:

Kod: Markera allt

				strcpy(log_filename_string,"\0\0\0");
				strcpy(log_filename_fat32,"\0\0\0");
Varje gång jag stänger filerna, nu funkar det mycket bättre i kortare tester.
Skriv svar