<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Reihenfolge von Befehlen]]></title><description><![CDATA[<p>Es geht um Folgendes: Ich habe einen Ring-Speicher (FIFO). Der wird regelmäßig mit einem Interrupt mit Daten befüllt. Der Ring-Speicher wird ab und zu vom Hauptprogramm geleert.</p>
<pre><code>void daten_verarbeiten() {
	interrupts_off();
	while(!ring_buffer.is_empty()) {
		uint8_t byte = ring_buffer.pop_front();
		// byte verarbeiten.
	}
	interrupts_on();
}
</code></pre>
<p>Kann ich davon ausgehen, dass die Interrupts auch wirklich abgeschaltet werden, bevor ich die Daten verarbeite, oder ist es möglich, dass der Compiler ein wenig optimier-Magie betreibt und plötzlich Daten verarbeitet werden, bevor die Interrupts aus sind?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/338583/reihenfolge-von-befehlen</link><generator>RSS for Node</generator><lastBuildDate>Mon, 13 Apr 2026 10:22:37 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/338583.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 24 Jun 2016 23:30:19 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Reihenfolge von Befehlen on Fri, 24 Jun 2016 23:30:19 GMT]]></title><description><![CDATA[<p>Es geht um Folgendes: Ich habe einen Ring-Speicher (FIFO). Der wird regelmäßig mit einem Interrupt mit Daten befüllt. Der Ring-Speicher wird ab und zu vom Hauptprogramm geleert.</p>
<pre><code>void daten_verarbeiten() {
	interrupts_off();
	while(!ring_buffer.is_empty()) {
		uint8_t byte = ring_buffer.pop_front();
		// byte verarbeiten.
	}
	interrupts_on();
}
</code></pre>
<p>Kann ich davon ausgehen, dass die Interrupts auch wirklich abgeschaltet werden, bevor ich die Daten verarbeite, oder ist es möglich, dass der Compiler ein wenig optimier-Magie betreibt und plötzlich Daten verarbeitet werden, bevor die Interrupts aus sind?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2500092</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2500092</guid><dc:creator><![CDATA[fenrayn]]></dc:creator><pubDate>Fri, 24 Jun 2016 23:30:19 GMT</pubDate></item><item><title><![CDATA[Reply to Reihenfolge von Befehlen on Sat, 25 Jun 2016 00:29:46 GMT]]></title><description><![CDATA[<p>Wenn <code>interrupts_off</code> und <code>interrupts_on</code> passend implementiert sind, dann ist garantiert dass das funktioniert wie gewünscht.</p>
<p>Natürlich nur unter der Voraussetzung dass es nur einen Core gibt. Wenn es &gt;= zwei Cores gibt, dann könnte u.U. dein Code auf einen Core laufen, und der Interrupt auf einem anderen. Und dann wäre es möglich dass der Interrupt noch läuft während dein Code auf die FIFO zugreift. Nämlich wenn der Interrupt kurz vor der Ausführung von <code>interrupts_off</code> zu laufen begonnen hat.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2500094</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2500094</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Sat, 25 Jun 2016 00:29:46 GMT</pubDate></item><item><title><![CDATA[Reply to Reihenfolge von Befehlen on Sat, 25 Jun 2016 00:36:16 GMT]]></title><description><![CDATA[<p>Es handelt sich nur um einen Core (Cortex M4). Danke sehr!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2500095</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2500095</guid><dc:creator><![CDATA[fenrayn]]></dc:creator><pubDate>Sat, 25 Jun 2016 00:36:16 GMT</pubDate></item></channel></rss>