Leere #define

Gast #3697887
Lesenswert?

Hallo und guten Morgen,
kann mir bitte jemand den Kopf von der Angehängten Funktion erklären.
Was bedeutet die leere define mit idata?
Was macht das für einen Sinn?

Danke
Schönes Wochenende!
1
#define uchar unsigned char
2
#define uint unsigned int
3
#define bit uchar
4
#define idata
5
#define code
6

7

8
uchar w1_rom_search( uchar diff, uchar idata *id )
9
{
10
  uchar i, j, next_diff;
11
  bit b;
12

13
  if( w1_reset() )
14
    return PRESENCE_ERR;      // error, no device found
15
  w1_byte_wr( SEARCH_ROM );      // ROM search command
16
  next_diff = LAST_DEVICE;      // unchanged on last device
17
  i = 8 * 8;          // 8 bytes
18
  do{
19
    j = 8;          // 8 bits
20
    do{
21
      b = w1_bit_io( 1 );      // read bit
22
      if( w1_bit_io( 1 ) ){      // read complement bit
23
  if( b )          // 11
24
    return DATA_ERR;      // data error
25
      }else{
26
  if( !b ){        // 00 = 2 devices
27
    if( diff > i ||
28
      ((*id & 1) && diff != i) ){
29
      b = 1;        // now 1
30
      next_diff = i;      // next pass 0
31
    }
32
  }
33
      }
34
      w1_bit_io( b );           // write bit
35
      *id >>= 1;
36
      if( b )          // store bit
37
  *id |= 0x80;
38
      i--;
39
    }while( --j );
40
    id++;          // next byte
41
  }while( i );
42
  return next_diff;        // to continue search
43
}
Gast #3697896
Lesenswert?

idata wird durch 'nichts' ersetzt. Der Kopf wird also zu

uchar w1_rom_search( uchar diff, uchar  *id )

und durch die uchar ersetzung zu

unsigned char w1_rom_search( unsigned char diff, unsigned char  *id )


Schlechter Stil ist das allemal. Defines schreibt man meistens groß, 
also
#define UCHAR unsigned char

Und die meisten defines sind überflüssig. Besser typedef benutzen.
Moderator Persönliche Seite #3703493
Lesenswert?

Mark Brandis schrieb:
> Drei von fünf ist doch nicht schlecht :)

Zwei von fünf, denn "bit" ist nur hier so definiert, während das
(daher Peters Bezugnahme) woanders tatsächlich einen eigenständigen
Typ darstellt.  Da hilft dir <stdint.h> gar nicht (und existiert
möglicherweise auf dem alten 8051-Compiler nicht einmal).

Da sich die Frage jedoch auf die leeren #defines bezog, geht dein
Einwand zu 100 % am Thema vorbei.
Gast #3705302
Lesenswert?

Google mal nach Speichermodel 8051.

The idata memory type may be used to declare variables only. You may not 
declare idata functions. This memory is indirectly accessed using 8-bit 
addresses and is the on-chip RAM of the 8051. The amount of idata is 
limited in size (to 256 bytes or less). The lower addresses of idata 
overlap the corresponding addresses of data memory.

Variables declared idata are located in the IDATA memory class.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren