logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Program do generowania dużych plików binarnych powyżej 100k w C/C++

MayK` 27 Gru 2006 22:46 5031 6
REKLAMA
  • #1 3376580
    MayK`
    Poziom 11  
    Posty: 26
    Ocena: 2
    Witam

    Poszukuje program w ktorym bede mogl w prosty sposob stworzyc duzy powyzej 100k plik (male pliki do 2k spokojnie moge pisac w programie do programatora - recznie)

    Dokladnie to potrzebuje taki program (nie wiem czy da sie taki wygererowac w C or C++ takei pliki) ktory wegeneruje mi taki plik ktory bede mogl poprzez programator przerzucic do programatora (czyli nam na mysli plik bez znakow konca lini etc... )

    W pliku tym potrzebuje zapisac bity wedlug pewnego algorytmu, ktory w danym programie bede mogl zapisac.
  • REKLAMA
  • #2 3377028
    mirekk36
    Poziom 42  
    Posty: 9195
    Pomógł: 964
    Ocena: 2289
    ... poczekaj kolego, spokojnie powoli - nie śpiesz się bo nikt cię nie zrozumie. O co ci w tym chodziło bo już się chyba sam zakręciłeś co? ;)

    Cytat:
    "...ktory wegeneruje mi taki plik ktory bede mogl poprzez programator przerzucic do programatora (czyli nam na mysli plik bez znakow konca lini etc... )"


    i:

    Cytat:
    "W pliku tym potrzebuje zapisac bity wedlug pewnego algorytmu, ktory w danym programie bede mogl zapisac"


    troszkę ci z tego masło maślane powychodziło - napisz może o jaki programator ci chodzi, jaki procek itp (a najważniejsze poukładaj swoje myśli) ;)
  • REKLAMA
  • #3 3377224
    shg
    Poziom 35  
    Posty: 2289
    Pomógł: 339
    Ocena: 135
    Ja to rozumiem tak, że chcesz po prostu wygenerować plik z danymi binarnymi (czyli nie tekst, chociaż tekst to też dane bianrne :]).

    Prosty program w C bez problemu sprawę załatwi.
    Wygenerujesz plik .bin "od ręki", ewentualnie niewielkim nakładem sił i środków można do tego dopisać generację pliku .hex (tekstowy, tak na marginesie :]).

    Leń ze mnie patentowany, więc bardzo często używam programów napisanych w C do generowania na przykałd tabelek (sinusy i inne takie).

    Podaj algorytm, jeżeli nie będzie skomplikowany, to Ci gotowca (program + dane) spreparuję.

    I następnym razem przeczytaj co napisałeś, bo ciężko się połapać :P.
  • REKLAMA
  • #4 3377234
    eko321
    Poziom 2  
    Posty: 4
    Przykladowy podprogram dla plikow binarnych napisany dala kompilatora Watcom C, dla WinAVR C moze byc inny. Nalezy spawdzic pliki naglowkowe stdio.h stdlib.h czy podobne funkcje wystepuja i sa zgodne programowo tj. maja te same nazwy i typy, stalych i zmiennych.

    int ptr;
    unsigned int sizebyte;
    ptr = open(Path,O_WRONLY|O_BINARY,S_IWRITE);
    if(ptr <= 0)
    { ptr = open(Path,O_WRONLY|O_CREAT|O_TRUNC|O_BINARY,S_IWRITE);
    if(ptr == -1)
    { sprintf(line,T_f_open,Path);
    /// error_message(line);
    return 0;
    }
    _dos_setfileattr(Path,0xA0); // sharable+archive
    }
    while(1)
    { sizebyte = sizeof(MY_STRUCT1);
    if(write(ptr,cpstruct1,sizebyte) != sizebyte) break;
    sizebyte = sizeof(MY_STRUCT2) * my_struct;
    if(write(ptr,cpstruct2,sizebyte) != sizebyte) break;
    close(ptr);
    return 1;
    }
    close(ptr);
  • #5 3378195
    MayK`
    Poziom 11  
    Posty: 26
    Ocena: 2
    Przepraszam za "troche" nieczytelny post.

    Tak chodzi mi o wygenerowanie pliku binarnego ktory wrzuce do programatora i zaprogramuje pamiec.

    @shg

    Jesli to nie problem to wyslij mi na maila przykladowy program, najlepiej z duza iloscia komentarzy , algorytm postaram sie sam zrobic.

    maila: Maayk(_at_)o2.pl
  • Pomocny post
    #6 3380015
    shg
    Poziom 35  
    Posty: 2289
    Pomógł: 339
    Ocena: 135
    No to nie ma tak lekko z gotowcem. Wszystko zależy od algorytmu, ale w najprostszej postaci, będzie tablica, a potem zapis do pliku i tyle.

    #include <stdio.h>
    #include <stdlib.h>
    
    /* Ilosc bajtow do zapisania w pliku */
    #define ILOSC_DANYCH    262144  /* tak na przyklad 256kB */
    
    /* Tablica z danymi (bajty) */
    unsigned char tablica[ILOSC_DANYCH];
    
    /* funkcja wypelni tablice jakimis danymi */
    void algorytm(void) {
    	unsigned long int pozycja;
    	/* Po kolei kazdy wszystkie elementy tablicy */
    	for(pozycja = 0; pozycja < ILOSC_DANYCH; pozycja++) {
    		/* zapis wartosci do tablicy */
    		/* tak dla przykladu 8 najmniej znaczacych bitow z aktualnej pozycji */
    		/* czyli w tablicy zostana zapisane 0,1,2,...,255,0,1,2, itd. */
    		tablica[pozycja] = pozycja & 0xff;
    	}
    }
    
    int main(int argc, char *argv[])
    {
    const char *nazwa;    /* nazawa pliku docelowego*/
    FILE *fh=NULL; /* 'uchwyt pliku' */
    
    	if(argc > 1) {
            /* w tablicy argv znajduja sie wskazniki na nazwe programu i kolejne argumenty */
            /* bierzemy drugi z kolei element, czyli pierwszy argument */
    		nazwa = argv[1];
    		/* probujemy otworzyc plik do zapisu (w) w trybie binarnym (b)
    		** wiekszosc systemow operacyjnych nie rozroznia plikow binarnych i tekstowych
    		** ale tak dla bezpieczenstwa warto dodac "B" do trybu */
    		fh = fopen(nazwa, "wb");
    		/* Sprawdzamy czy udalo sie otworzyc */
    		if(fh != 0) {
    			/* udalo sie */
    			/* funkcja algorytm() wypelni tablice danymi */
    			algorytm();
    			/* a fwrite zapisze cala zawartosc tablicy do pliku */
    			/* Sprawdzimy jeszcze ile bajtow udalo sie zapisac */
    			unsigned long int nw;       /* do tej zmiennej zostanie wrzucona ilosc zapisanych bajtow */
    			nw = fwrite(tablica, 1, ILOSC_DANYCH, fh);
    			if(nw != ILOSC_DANYCH) {
    				/* zapisano mniej bajtow niz bylo w tablicy, czyli cos nie tak z dyskiem (blad, lub brak miejsca) */
    				printf("Blad zapisu %ld z %ld bajtow zapisane.\n", nw, ILOSC_DANYCH);
    				return 1; /* zwraca kod rozny od 0 - zakonczenie z bledem */
    			}
    			/* Bardzo ważne! Każdy otwarty plik trzeba po skończeniu z nim pracy zamknąć */
    			fclose(fh);
    		} else {
    			/* Nie udalo sie */
    			/* Warto by o tym poinformowac */
    			printf("Nie mozna otworzyc pliku \"%s\" do zapisu.\n", nazwa);
    			return 1;
    		}
    	} else {
    		printf("Brak nazwy pliku\n");
    		return 1;
    	}
    
      return 0; /* zwraca kod 0 - zakonczenie bez bledu */
    }
    


    Działa pod DOSem, pod konsolą w WinXP i pod Linuksem.

    Program wywołuje się podając mu jako argument nazwę docelowego pliku, na przykład:
    nazwa_programu dane.bin
  • REKLAMA
  • #7 3385518
    MayK`
    Poziom 11  
    Posty: 26
    Ocena: 2
    Wielkie dzieki, program ladnie generuje pliki.
    Wlasnie taki byl mi potrzebny.

Podsumowanie tematu

✨ Dyskusja dotyczyła potrzeby stworzenia programu w C/C++ do generowania dużych plików binarnych powyżej 100 kB, które można bezpośrednio wgrać do programatora pamięci. Użytkownik poszukiwał prostego narzędzia umożliwiającego zapis bitów według określonego algorytmu, bez znaków końca linii, co jest istotne przy programowaniu pamięci. W odpowiedziach podkreślono, że napisanie takiego programu w C jest możliwe i stosunkowo proste, zwłaszcza gdy algorytm generujący dane nie jest skomplikowany. Przykładowy kod w C został udostępniony, pokazujący tworzenie tablicy bajtów i zapis do pliku binarnego, z możliwością łatwej modyfikacji algorytmu generującego dane. Wskazano również na różnice w funkcjach systemowych zależnych od kompilatora (np. Watcom C, WinAVR C). Ostatecznie użytkownik potwierdził, że otrzymany program spełnia jego oczekiwania i pozwala na generowanie potrzebnych plików binarnych do programatora.
Podsumowanie wygenerowane przez AI na podstawie treści dyskusji.
REKLAMA