01. september 2004 - 09:04Der er
8 kommentarer og 1 løsning
Dybt inde i Linux. Need help.
Hey folkens
Jeg er igang med at pille med uC Linux til et embedded system. Ved opstarten af kernen møder jeg dog lidt modstand fra pingvinen.
\kernel\kthread.c (linie ca. 130) udføres nedenstående. work.func(work.data);
Efter noget debuging er jeg så kommet til et punkt jeg ikke lige er helt med på. \include\linux\workqueue.h (linie ca. 20) #define __WORK_INITIALIZER(n, f, d) { \ .entry = { &(n).entry, &(n).entry }, \ .func = (f), \ .data = (d), \ .timer = TIMER_INITIALIZER(NULL, 0, 0), \ }
Mit spørgsmål er så hvad #define DECLARE_WORK(.... osv. er??? Er det en speciel måde at oprette en funktion på(som det ligner)
Har hellere aldrig set en struct med .entry, .func osv.. Hvad betyder alt det???
Og et sidste spørgsmål. Når "work.func(work.data);" kaldes dør kernen. Hvad kan dette skyldes??? Er der noget IRQ der er sat forkert op som får den til at fryse???
Håber sq i kan hjælpe en ung junior pingvin Mvh GreateWhite.DK
Det er ikke så meget hvad den får. Det er mere hvad en sådan macro betyder. Men nu hvor jeg ved det hedder macro så kan jeg da lige surfe lidt mere rundt på nettet. Ved du noget om hvad .entry, .func osv. bruges til?
Macro'en er ganske rigtigt lidt speciel, og kræver at man bruger en C99 kompiler, dvs ingen C++ og en ret ny gcc eller ...
Det specielle er at man bruger ".zzz=xx" i initialiser listen. Normalt skal man liste initialiserne i rækkefølge men med C99 kan man specificere at det er feltet .zzz der skal have værdien xx. Det kan så vidt jeg ved også bruges til at initialisere arbitrære elementer i en union. Så vidt jeg kan se må "struct work_struct" være et struct der er beregnet til at indgå i en dobbelt linket liste. Jeg kunne forestille mig macro'en brugt som:
struct work_struct { struct entry_struct { struct entry_struct *next; struct entry_struct *prev; }entry; void (*func)(); int data; int *timer; };
int main(void) { DECLARE_WORK(Ole, Func, 1); return 0; }
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.