Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

[WINARM]Długość poszczególnych typów zmiennych dla AT91SAM7S

AVATAR_PL 18 Dec 2008 14:34 2510 6
  • #1
    AVATAR_PL
    Level 14  
    Witam!
    Mam następujące pytanie: ile bitów przypada na poniższe typy zmiennych (kompilator GCC-WINARM)
    int - chyba 32bit
    char - raczej 8 bit
    short - ?
    long - ?
    Pytanie może banalne ale odpowiedź bardzo mi pomoże :)
  • #2
    marek-c
    Level 19  
    AVATAR_PL wrote:
    Witam!
    Mam następujące pytanie: ile bitów przypada na poniższe typy zmiennych (kompilator GCC-WINARM)
    int - chyba 32bit
    char - raczej 8 bit
    short - ?
    long - ?
    Pytanie może banalne ale odpowiedź bardzo mi pomoże :)


    sizeof()...
  • #3
    AVATAR_PL
    Level 14  
    oczywiście, że sizeof() :) ale niestety nie mam jak wyprowadzić wyniku na zewnątrz (goły procesor :( ) więc stąd mój post.
  • #5
    Freddie Chopin
    MCUs specialist
    Quote:

    * The values of the columns Size and Range depend on the system the program is compiled for. The values shown above are those found on most 32-bit systems. But for other systems, the general specification is that int has the natural size suggested by the system architecture (one "word") and the four integer types char, short, int and long must each one be at least as large as the one preceding it, with char being always 1 byte in size. The same applies to the floating point types float, double and long double, where each one must provide at least as much precision as the preceding one.


    4\/3!!
  • #6
    BoskiDialer
    Level 34  
    AVATAR_PL wrote:
    oczywiście, że sizeof() :) ale niestety nie mam jak wyprowadzić wyniku na zewnątrz (goły procesor :( ) więc stąd mój post.


    To nie jest wytłumaczenie. Kod można skompilować do kodu asemblera, można w kodzie w C wprowadzić wyrażenie, w którym występuje dzielenie przez zero w przypadku, kiedy sizeof jest równe czemuś, co nas interesuje ("char __tmp = 1 / (4 - sizeof(..))" - kompilator powinien próbować policzyć to wyrażenie).

    Poczytaj o stdint.h, w szczególności o [u]int[8|16|32|64]_t - rozmiar powinien być gwarantowany.
  • #7
    Smashing
    Level 20  
    Może ja spróbuje
    char zawiera 8 bitów, jeśli napiszesz char k; w pamięci AMR masz adres np
    0x00200000 użyty przez zmienną k ale adresy
    0x00200001, 0x00200002, 0x00200003 są puste i nie możesz go użyć, ale są wykorzystane. Jak napiszesz char k, j, w,z; to te zmienne będą po kolei od adresu 0x00200000 do 0x00200003.
    char 8 bitow
    short 16 bitow
    int 32 bitów
    long 32 bitów
    double 64 bitów
    może też być tak:
    char k;
    char w;
    short z;
    zajmie to tyle samo w pamięci co 4 char czyli od 0x00000000 do 0x00000003.
    ale jak napiszesz:
    char k;
    short z;
    char w;
    to niby to samo zajmie to np :
    char k adres : 0x00200000
    short z adres: 0x00200002
    char w adres: 0x00200004 adres 0x00200005 0x00200006 0x00200007 będzie pusty
    czyli w sumie tyle co double

    hmmm chyba jakoś tak to będzie... ale nikt nie jest nieomylny...