Hjælp mig på C venligst

L

luft

Guest
Jeg lærer c for indlejrede system programmering.Jeg har 5 spørgsmål listen nedenfor.Jeg vil sætte pris på det, hvis nogen kan forklare nogle af dem eller endog alle.Eller kan nogen anbefale mig nogle henvisninger til magert disse konventioner?
1 Hvad er denne konvention, som denne: (kopi fra Hi-tech c)
# ifndef _PIC_H
# define _PIC_H
især understregningstegnet undrer mig meget.

2.hvad er det tegn &, *, , @, og parentesen i (unsigned) betyder i det følgende (fra Hi-Tech)
statiske bit LCD_RS @ ((unsigned) & PORTA * 8 2);

3.hvad betyder denne erklæring betyde?(fra Hi-tech c)
# define LCD_STROBE ((LCD_EN = 1), (LCD_EN = 0))

4.Hvad er understregning og <....> betyde?(fra sourceboost C)
# define _LCD_Read LCD_Read <InterfaceType, UseBusy, DataPort, Data_PortTris, CtrlPort, Ctrl_PortTris, RS, RW, E>

5.der kan forklare
_LCD_TEMPL Og skabelon

i den del af programmet som følgende: (fra sourceboost C)
......
/ / Disse makroer gøre Efterfoelgende koden mere læsevenlig, men kan virke lidt forvirrende
# define _LCD_RawWriteNibble LCD_RawWriteNibble <InterfaceType, UseBusy, DataPort, Data_PortTris, CtrlPort, Ctrl_PortTris, RS, RW, E>
# define _LCD_RawWriteNibbleInline LCD_RawWriteNibbleInline <InterfaceType, UseBusy, DataPort, Data_PortTris, CtrlPort, Ctrl_PortTris, RS, RW, E>
# define _LCD_Read LCD_Read <InterfaceType, UseBusy, DataPort, Data_PortTris, CtrlPort, Ctrl_PortTris, RS, RW, E>
# define _LCD_WaitForNotBusy LCD_WaitForNotBusy <InterfaceType, UseBusy, DataPort, Data_PortTris, CtrlPort, Ctrl_PortTris, RS, RW, E>
# define _LCD_Write LCD_Write <InterfaceType, UseBusy, DataPort, Data_PortTris, CtrlPort, Ctrl_PortTris, RS, RW, E>
# define _LCD_FunctionMode LCD_FunctionMode <InterfaceType, UseBusy, DataPort, Data_PortTris, CtrlPort, Ctrl_PortTris, RS, RW, E>
# define _LCD_DataMode LCD_DataMode <InterfaceType, UseBusy, DataPort, Data_PortTris, CtrlPort, Ctrl_PortTris, RS, RW, E>
# define _LCD_RawWrite LCD_RawWrite <InterfaceType, UseBusy, DataPort, Data_PortTris, CtrlPort, Ctrl_PortTris, RS, RW, E>
# define _LCD_ClockOut LCD_ClockOut <InterfaceType, UseBusy, DataPort, Data_PortTris, CtrlPort, Ctrl_PortTris, RS, RW, E>

# define _LCD_TEMPL skabelon <unsigned char InterfaceType, \
unsigned char UseBusy, \
unsigned int dataport, unsigned int Data_PortTris, \
unsigned int CtrlPort, unsigned int Ctrl_PortTris, \
unsigned char RS, unsigned char RW, unsigned char E>

_LCD_TEMPL
inline void LCD_FunctionMode (void)
(
flygtige bit rs (at) CtrlPort.RS = 0;
)

_LCD_TEMPL
inline void LCD_DataMode (void)
(
flygtige bit rs (at) CtrlPort.RS = 1;
)
......

 
Ja, du skal lære C-sprog først.»forårsage disse symboler, som du spurgte, bruges af C-sprog.

 
Jeg kan kun svare for det første qustion

Q1:
grund til at understrege det meanless, det er en del af navnet på identifcation.
og på grund af # ifndef <name> hvis dette ikke <name> defineret befor vil compileren copmile den næste linje, indtil finde # endif ELLER # else,
og hvis defineret befor, vil compileren ikke kompilere denne del, og ikke få det hex-fil

og dette spørgsmål mener, hvis ikke defineret derefter definere _PIC_H

simpelthen u kan søge i hjælp i compileren u'll finde det meget let at forstå det.

 
Hej!

Før du skriver software til microcontrollere, lære
første C-programmering på en pc.Brug en pc med en ANSI
kompatibel C compiler.Skriv EXE programmer, der vil køre
i en MS-DOS konsol-vinduet.På nettet kan du finde en masse
af gratis tutorials om C.

Eksempel:
http://www.ericlindsay.com/applix/ctutor.pdf

(Søg med Google efter "C tutorial" eller "Hi-tech c tutorial").

Skift til en C compiler til indlejrede systemer, når du
Herre C-programmering for pc'en.

* * *
Compiler - Borland C 4,52 (Also for C).

Perfekt til at lære C. kompiler og debugger køre under Windows.
(Konsollen til input og output er en Windows-formular ikke
MS-DOS-konsollen vindue).
I projektet indstillinger kan du indstille sproget overholdes.
(Kernighan og Ritchie, ANSI, UNIX V, Borland udvidelser).* * *

Compiler - Pacific C til MS-DOS (Hi-tech)

Gratis MS-DOS ANSI C compiler med debugger og
en 366 sider PDF manual:

http://www.htsoft.com/products/PACIFICc.php

Dette compiler og debugger kører også i en MS-DOS
konsol vindue under Windows.
Hvis du opretter en PIF fil, vil programmet køre i
fuldskærms DOS-tilstand under Windows med musen støtte.* * *

Den første bog om C:

The C Programming Language (Second Edition).
Brian W. Kernighan / Dennis M. Ritchie
ISBN: 0-13-110362-8

Luciano

 
Husk, at C-makroer er simpelthen tekst substitution.Makroer er stærke, men til tider vanskeligt at følge, især når den makro indeholder andre makroer.

1.I C, er en understregning en almindelig karakter som A til Z, så _PIC_H er simpelthen en identifikator (funktionens navn, makro navn, osv.) muligvis defineret andetsteds.

2.Jeg tror ikke, at @ er gyldig C-sprog.Det kan være nogle Forlængelsen af din compiler, eller det kan være et symbolsk anerkendt af nogle andre præprocessor.Udtrykket ((unsigned) & PORTA * 8 2) tager adresse PORTA, kaster det til en usigneret heltal, ganger det med 8, og tilføjer 2.Den slags er meget almindeligt inden for indlejrede C.

3.Der definerer en makro med navnet LCD_STROBE.Hvis du bruger denne makro i dit program, det ekspanderer til teksten ((LCD_EN = 1), (LCD_EN = 0)), der sker at indeholde to opgaver er adskilt af komma operatør.Det indeholder noget opkaldt LCD_EN til 1, og derefter sletter det til 0.

4.Igen, understregning er bare en almindelig karakter, så _LCD_Read er simpelthen makronavn.Hvis du bruger denne makro i dit program, det udvider sig til alt det mærkelige tekst.Hvem ved, hvad den gør!Du bliver nødt til at gå finde, hvor det bliver brugt, og puzzle ud af, hvad programmørerne tænkte.

5.Yuch!Jeg tror hemmeligheden er "skabelon".Det er ikke en del af C-sprog, så det er sikkert endnu en makro.Prøv at finde sin definition.

Jeg kan godt lide deres kommentar: "... kan virke lidt forvirrende".Her er en stor bog og en hjælpsom FAQ:
http://www.edaboard.com/viewtopic.php?t=51807
http://www.eskimo.com/ ~ SCS / C-faq / top.html

 
ahm_hassaan skrev:

Jeg kan kun svare for det første qustionQ1:

grund til at understrege det meanless, det er en del af navnet på identifcation.

og på grund af # ifndef <name> hvis dette ikke <name> defineret befor vil compileren copmile den næste linje, indtil finde # endif ELLER # else,

og hvis defineret befor, vil compileren ikke kompilere denne del, og ikke få det hex-filog dette spørgsmål mener, hvis ikke defineret derefter definere _PIC_Hsimpelthen u kan søge i hjælp i compileren u'll finde det meget let at forstå det.
 
Du er hurtigt på vej mod den dybe ende af svømmebassinet!

En identifikation som _PIC_H begynder med en understregning og et stort bogstav.C-standarden siger, hvis jeg læser det rigtigt, at disse navne skal kun bruges af de fyre, der har oprettet compiler.Dit program bør ikke skabe sådanne navne eller forsøge at bruge dem i dit program.Denne regel hjælper compiler forfattere og compiler brugere fra et uheld at træde på hinandens tæer.(Jeg sandsynligvis mis-angivet noget der - læsning afsnit 7.1.3 i standarden giver mig hovedpine.)

Nu vil jeg prøve at gætte, hvorfor compileren fyre oprettet _PIC_H.Det ligner et flag, der forhindrer alle de andre ting i hovedet ved et uheld bliver defineret to gange, hvis nogen forsøger at inkludere header fil to gange.Det er et fælles problem, når en header fil indeholder andre header-filer.Grunden til at de kaldte den _PIC_H er nok fordi det er nemt at huske, at det er et flag til en fil med navnet pic.h.

Citat:

Jeg kan stadig ikke se noget fra din 2:e forklaring.
Det er klart, fra koden, betyder det, at LCD's RS kontrol pin er tilslutning til PORTA pin 2, men hvordan kan det komme dertil ved denne form syntaks?
 
echo47 skrev:

Du er hurtigt på vej mod den dybe ende af svømmebassinet!En identifikation som _PIC_H begynder med en understregning og et stort bogstav.
C-standarden siger, hvis jeg læser det rigtigt, at disse navne skal kun bruges af de fyre, der har oprettet compiler.
Dit program bør ikke skabe sådanne navne eller forsøge at bruge dem i dit program.
Denne regel hjælper compiler forfattere og compiler brugere fra et uheld at træde på hinandens tæer.
(Jeg sandsynligvis mis-angivet noget der - læsning afsnit 7.1.3 i standarden giver mig hovedpine.)Nu vil jeg prøve at gætte, hvorfor compileren fyre oprettet _PIC_H.
Det ligner et flag, der forhindrer alle de andre ting i hovedet ved et uheld bliver defineret to gange, hvis nogen forsøger at inkludere header fil to gange.
Det er et fælles problem, når en header fil indeholder andre header-filer.
Grunden til at de kaldte den _PIC_H er nok fordi det er nemt at huske, at det er et flag til en fil med navnet pic.h.Citat:

Jeg kan stadig ikke se noget fra din 2:e forklaring.
Det er klart, fra koden, betyder det, at LCD's RS kontrol pin er tilslutning til PORTA pin 2, men hvordan kan det komme dertil ved denne form syntaks?
 
statiske bit LCD_RS @ ((unsigned) & PORTA * 8 2); / / Register vælgeGodt, at @-symbolet er ikke gyldig C, som jeg allerede har nævnt.Jeg ved ikke, hvad "bit" er enten.Måske er det, hvor du sidder fast.

Lad os dissekere ((unsigned) & PORTA * 8 2)

PORTA
Ukendt definition.Måske er det i en anden header fil.

& PORTA
Det er den "adresse" operatør.Den genererer en pegepind til PORTA.

(unsigned) & PORTA
Der kaster (konverterer) den adresse til en usigneret heltal.

(unsigned) & PORTA * 8
Gange 8.

((unsigned) & PORTA * 8 2)
Plus 2.

Vidste at hjælpe?

<img src="http://www.edaboard.com/images/smiles/icon_wink.gif" alt="Wink" border="0" />
 
statiske bit LCD_RS @ ((unsigned) & PORTA * 8 2); / / Register vælge

HER BIT KUNNE BLIVE en datatype, DER KUNNE BLIVE TYPE DIN BRUG typedef

 

Welcome to EDABoard.com

Sponsor

Back
Top