Not logged in. · Lost password · Register

Page:  previous  1  2  3  next 
morty
SPiC-Meister
(Moderator)
Member since May 2011
331 posts
In reply to post ID 4755
Quote by maddes:
Ein Hauptprogramm und eine Interruptbehandlung greifen nebenläufig
auf die Variable uint16_t foo zu. Das Hauptprogramm verwendet foo
in der Anweisung uint16_t bar = foo; der Interrupthandler verwendet
foo im Vergleich if(foo == 5). Welches Nebenläufigkeitsproblem kann
auftreten?
❏ Lost-Update
❏ Lost-Wakeup
❏ keines
❏ Das Hauptprogramm könnte einen inkonsistenten Wert lesen, da foo aus 2 Bytes
besteht und nicht mit einer Instruktion geladen werden kann.

bei der frage bin ich mir unsicher. ich würde 1 oder 4 sagen aber wirklich wissen tu ichs net. vllt hat jmd ne erklärung für mich?
danke

Na dann erkläre doch mal warum das Eine oder das Andere stimmen könnte.
oliiii
Member since Mar 2011
5 posts
In reply to post ID 4758
Quote by morty:
Quote by oliiii:
Frage Oktober 2006 d)
Was passiert. wenn man das folgende Programmstück übersetzen und ausführen möchte:
char *string;
string = "Spic ist toll";
❏Der Compiler wird einen Fehler melden, weil diese Art von Zugriff auf einen Zeiger nicht erlaubt ist.
❏Der Variablen string wird der Zeiger auf die konstante Zeichenkette "Spic ist toll" zugeordnet
❏Unter Betriebssystemen wie Unix oder Windows wird zur Laufzeit eine Schutzverletzung bzw. SIGSEV ausgelöst, da dem Zeiger ein Wert zugeordnet wird, der Zeiger jedoch nicht initialisiert wurde.
❏Die Zeichenkette "Spic ist toll" ist konstant und darf daher keinem nicht-konstanten Zeiger zugewiesen werden.

"Spic ist toll" wäre doch in diesem Fall die Addresse des zu addressierenden Speichers.
Hä?

Normal sieht das doch so aus:
char b = ...;
char* string =&b;
also müsste hier doch "Spic ist toll" &b entsprechen.
Da aber "Spic ist toll" kein gültiges  Format für eine Addresse ist, würde ich eine  Fehlermeldung des Compilers erwarten.
Richtig?
Timo Sabitzer
Member since Jan 2012
4 posts
In reply to post #16
Nachdem foo zu Beginn intialisiert wird und später von der main() wie von der ISR nur gelesen wird sollte doch eig. gar kein Problem auftreten.
maddes
Member since Feb 2011
9 posts
In reply to post #16
mehr oder weniger bin ich über das auschlussverfahren auf die beiden antworten gekommen. eine erklärung habe ich nicht wirklich.
maddes
Member since Feb 2011
9 posts
In reply to post #18
Quote by Timo Sabitzer:
Nachdem foo zu Beginn intialisiert wird und später von der main() wie von der ISR nur gelesen wird sollte doch eig. gar kein Problem auftreten.

d.h. nur wenn das hauptprogramm oder der Ihandler foo verändern würden könnten probleme auftreten
Timo Sabitzer
Member since Jan 2012
4 posts
Weder die main() noch die ISR verändern die Variable, damit fällt 1) schon mal weg. 2) ohnehin, weil hier nix schläft.
Also bleibe noch 3) und 4). Imho ist aber 4) auch falsch. Selbst wenn der IHandler zwischen dem 1ten und 2ten Byte eingreift, verändert er ja foo nicht. Deshalb sollte da auch nix inkontinentes ;) entstehen. Vll kann ja Morty unauffällig nicken oder berichtigen :D

Quote by maddes:
d.h. nur wenn das hauptprogramm oder der Ihandler foo verändern würden könnten probleme auftreten

...oder beide. Hätte ich so interpretiert, da auch in den Folien immer "Lesen und Schreiben" hervorgehoben ist.
This post was edited on 2012-07-26, 14:11 by Timo Sabitzer.
KapHa
Member since Oct 2011
13 posts
In reply to post #17
Hi!

@Oktober 2006 Aufgabe 1 d)
Überlege noch mal welchen Datentyp "Spic ist toll" hat.

@Juli 2009 Aufgabe 1 b)
Schaut relativ gut aus, nur hat Lost-Update rein gar nichts mit schlafen zu tun, wie die Folie 15-17 im GSPiC-Handout zeigt
Raim
GSPiC-Guru
Member since May 2011
79 posts
In reply to post #17
Quote by oliiii:
Normal sieht das doch so aus:
char b = ...;
char* string =&b;

Nein, eine konstante Zeichenfolge wie "SPiC ist toll" hat den Typ char *. Vergleiche GSPiC-Folien 6-13.

Edit: Ganz korrekt wäre natürlich: const char *
This post was edited on 2012-07-26, 16:00 by Raim.
oliiii
Member since Mar 2011
5 posts
Ahhh...das erklärt einiges.
dann wohl Antwort 2,
Dankeschön
Timo Sabitzer
Member since Jan 2012
4 posts
In reply to post #22
Quote by KapHa:
...nur hat Lost-Update rein gar nichts mit schlafen zu tun, ...

Die Aufgabenstellung 2009-Aufgabe 1b) auch nicht - Antwort 2 aber und kann deshalb ausgeschlossen werden.
This post was edited on 2012-07-26, 15:27 by Timo Sabitzer.
KapHa
Member since Oct 2011
13 posts
Quote by Timo Sabitzer:
Die Aufgabenstellung 2009-Aufgabe 1b) auch nicht - Antwort 2 aber und kann deshalb ausgeschlossen werden.
Aaahh!
Sorry, ich habe deine Antwort nicht gescheit gelesen ....
Ja, du hast natürlich recht.
H³lm
Member since Nov 2011
2 posts
In reply to post ID 4691
Quote by Femto on 2012-07-23, 18:25:
c) Was ist ein Stack-Frame?
❏ Der Speicherbereich, in dem der Programmcode einer Funktion
abgelegt ist.
❏ Ein spezieller Registersatz des Prozessors zur Bearbeitung von Funktionen.
❏ Ein Fehler, der bei unberechtigten Zugriffen auf den Stack-Speicher entsteht.
❏ Ein Bereich des Speichers, in dem u.a. lokale automatic-Variablen
einer Funktion abgelegt sind.

Hier tippe ich auf das vierte, da ja laut Skript lokale Variablen dort abgelegt werden, oder hab ich das falsch verstanden?


müsste das nicht Antwort 2 sein ?? im Stack-Frame befinden sich ja z.B. auch Framepointer. Somit ist ein Datenregister (Antwort 4) nur ein Teil davon.
Athazo
Member since Oct 2011
9 posts
So wie ich das verstehe zeigt der Framepointer nur auf den Beginn des Stack-Frames, ist aber selber kein Teil davon.

Mal eine Frage, wo werden globale, initialisierte volatile Variablen abgelegt (ich beziehe mich auf August 2011 Aufgabe 3 a))? Im .data Segment oder im Stack?
crypton
Member since Oct 2011
3 posts
In reply to post ID 4755
Quote by maddes:
Ein Hauptprogramm und eine Interruptbehandlung greifen nebenläufig
auf die Variable uint16_t foo zu. Das Hauptprogramm verwendet foo
in der Anweisung uint16_t bar = foo; der Interrupthandler verwendet
foo im Vergleich if(foo == 5). Welches Nebenläufigkeitsproblem kann
auftreten?
❏ Lost-Update
❏ Lost-Wakeup
❏ keines
❏ Das Hauptprogramm könnte einen inkonsistenten Wert lesen, da foo aus 2 Bytes
besteht und nicht mit einer Instruktion geladen werden kann.

bei der frage bin ich mir unsicher. ich würde 1 oder 4 sagen aber wirklich wissen tu ichs net. vllt hat jmd ne erklärung für mich?
danke
Du greifst sowohl im Hauptprogramm als auch in der Interruptbehandlung lesend auf eine Variable zu, ohne diese jemals zu veraendern.
Was denkst du jetzt und warum?
Ansonsten, wieso denkst du 1 oder 4?
Christian St.
Member since May 2011
212 posts
In reply to post #28
@H³lm: ein Framepointer zeigt auf einen Stackframe. Ein Stackframe ist ein Bereich im Speicher, ein Framepointer (oder auch Stackpointer) ist ein Pointer auf diesen Bereich.

@Athazo: Laut https://en.wikipedia.org/wiki/Data_segment werden alle globalen und alle statischen Variablen im .data gespeichert. Bei einer Speicherung im Stack gäbe es ja das Problem, dass der Stack ständig die Größe ändert, wo sollte diese Variable dann stehen, damit sie nicht verloren geht?
Close Smaller – Larger + Reply to this post:
Verification code: VeriCode Please enter the word from the image into the text field below. (Type the letters only, lower case is okay.)
Smileys: :-) ;-) :-D :-p :blush: :cool: :rolleyes: :huh: :-/ <_< :-( :'( :#: :scared: 8-( :nuts: :-O :troll:
Special characters:
Page:  previous  1  2  3  next 
Go to forum
Powered by the Unclassified NewsBoard software, 20110527-dev, © 2003-8 by Yves Goergen