Sida 3 av 4

Re: Microchip MDD. Problem med filnamn.

Postat: 27 maj 2012, 16:01:31
av TomasL
Han använder fel funktion FSOpen tillåter endast 8+3 och ASCII.
Enligt API-dokumentationen skall man använda wFSOpen.

Re: Microchip MDD. Problem med filnamn.

Postat: 27 maj 2012, 17:09:36
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.

Re: Microchip MDD. Problem med filnamn.

Postat: 27 maj 2012, 18:00:51
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.

Re: Microchip MDD. Problem med filnamn.

Postat: 27 maj 2012, 18:41:12
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?

Re: Microchip MDD. Problem med filnamn.

Postat: 27 maj 2012, 19:00:01
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?

Re: Microchip MDD. Problem med filnamn.

Postat: 27 maj 2012, 21:17:15
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.

Re: Microchip MDD. Problem med filnamn.

Postat: 27 maj 2012, 21:56:08
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... :-)

Re: Microchip MDD. Problem med filnamn.

Postat: 27 maj 2012, 22:53:49
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;

Re: Microchip MDD. Problem med filnamn.

Postat: 28 maj 2012, 07:24:16
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.

Re: Microchip MDD. Problem med filnamn.

Postat: 28 maj 2012, 09:12:50
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?

Re: Microchip MDD. Problem med filnamn.

Postat: 28 maj 2012, 09:23:56
av Zajber
Har lagt till en handler för general exceptions men den tar aldrig felet.

Re: Microchip MDD. Problem med filnamn.

Postat: 28 maj 2012, 09:29:50
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.

Re: Microchip MDD. Problem med filnamn.

Postat: 28 maj 2012, 09:32:39
av TomasL
Du måste stänga av interrupten, köra koden, slå på dem igen.

Re: Microchip MDD. Problem med filnamn.

Postat: 28 maj 2012, 09:36:01
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);
	

Re: Microchip MDD. Problem med filnamn.

Postat: 28 maj 2012, 09:50:00
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.