Flashback bygger pepparkakshus!
  • 5
  • 6
2020-08-12, 23:45
  #61
Medlem
Citat:
Ursprungligen postat av Annaconda
Du vill nog använda ping-pong buffrar för in&ut.

definitivt, loopen får inte pausas där
Citera
2020-08-12, 23:45
  #62
Medlem
Citat:
Ursprungligen postat av maco.81
Ja, det spelar roll eftersom kompilatorn aldrig kan optimera bort minnesaccesserna som en global variabel innebär. I ett lokalt scope har kompilatorn full överblick av en variabels användning och kan ofta välja att lagra värdet i ett register istället.

bra info, tackar!
Citera
2020-08-13, 21:29
  #63
Medlem
Wintersmiths avatar
Citat:
Ursprungligen postat av chelchele
bra info, tackar!
Ska du skriva effektiv kod i C för inbyggda system bör du lära dig processorn och assemblerkod. Säger inte att man ska skriva assemblerkod, men för kritiska funktioner bör du titta hur koden som kompilatorn genererat och se så den verkar vettig. Och alla dina funderingar om vad som händer om man skriver si eller så i C bör du göra små experiment med just den kompilatorn du använder och kolla på den genererade assemberkoden. Ibland kan små skillnader i hur man skriver C få stor effekt på resultatet. Det är bättre du lär dig undersöka själv än att andra ska gissa exakt vilken effekt olika val får.

I embedded realtidssystem bör du antagligen undvika heapen helt (malloc/free/osv). Bättre att allokera alla datastrukturer du behöver statiskt och ha funktioner som arbetar på dem. För övrigt kan sägas att något som verkar ha gått förlorat i den nya generationen programmerare är att de inte lärt sig tänka i datastrukturer och algoritmer, något som var mer fokus på förut. Med för mycket fokus på klasser och meddelanden, och funktionella saker går lätt kärnan i vad ett program gör förlorad. De flesta typiska program kan sägas behöva att antal datastrukterer som effektivt supportar den datan som programmet jobbar på, plus funktioner/metoder/etc som på ett väldefinierat och säkert sätt modifierar datastrukturerna efter ny input. Så klart det finns undantagsfall.
__________________
Senast redigerad av Wintersmith 2020-08-13 kl. 21:37.
Citera
2020-08-13, 22:18
  #64
Medlem
Citat:
Ursprungligen postat av Wintersmith
Ska du skriva effektiv kod i C för inbyggda system bör du lära dig processorn och assemblerkod. Säger inte att man ska skriva assemblerkod, men för kritiska funktioner bör du titta hur koden som kompilatorn genererat och se så den verkar vettig. Och alla dina funderingar om vad som händer om man skriver si eller så i C bör du göra små experiment med just den kompilatorn du använder och kolla på den genererade assemberkoden. Ibland kan små skillnader i hur man skriver C få stor effekt på resultatet. Det är bättre du lär dig undersöka själv än att andra ska gissa exakt vilken effekt olika val får.

Väl talat. Även om det är väldigt sällan man skriver assembly idag så är det fortfarande nyttigt att förstå hur en C kompilator fungerar och vad för kod som kommer ut i andra änden. Denna sidan är en fantastisk resurs för det ändamålet: https://godbolt.org/
Citera
2020-08-13, 22:52
  #65
Medlem
Citat:
Ursprungligen postat av Wintersmith
Ska du skriva effektiv kod i C för inbyggda system bör du lära dig processorn och assemblerkod. Säger inte att man ska skriva assemblerkod, men för kritiska funktioner bör du titta hur koden som kompilatorn genererat och se så den verkar vettig. Och alla dina funderingar om vad som händer om man skriver si eller så i C bör du göra små experiment med just den kompilatorn du använder och kolla på den genererade assemberkoden. Ibland kan små skillnader i hur man skriver C få stor effekt på resultatet. Det är bättre du lär dig undersöka själv än att andra ska gissa exakt vilken effekt olika val får.

I embedded realtidssystem bör du antagligen undvika heapen helt (malloc/free/osv). Bättre att allokera alla datastrukturer du behöver statiskt och ha funktioner som arbetar på dem. För övrigt kan sägas att något som verkar ha gått förlorat i den nya generationen programmerare är att de inte lärt sig tänka i datastrukturer och algoritmer, något som var mer fokus på förut. Med för mycket fokus på klasser och meddelanden, och funktionella saker går lätt kärnan i vad ett program gör förlorad. De flesta typiska program kan sägas behöva att antal datastrukterer som effektivt supportar den datan som programmet jobbar på, plus funktioner/metoder/etc som på ett väldefinierat och säkert sätt modifierar datastrukturerna efter ny input. Så klart det finns undantagsfall.

uppskattar info, men jag kommer aldrig gå ner till assemblernivå, jag är algoritmutvecklare och van vid högnivåspråk, jag skriver i C och det får räcka. Kanske jag plockar upp några tricks på vägen hur olika kod är olika snabb men hur olika kan det vara från java? hur som helst går jag inte längre än så, men bra att känna till det du skrev.
Citera
2020-08-14, 09:12
  #66
Medlem
Citat:
Ursprungligen postat av chelchele
uppskattar info, men jag kommer aldrig gå ner till assemblernivå, jag är algoritmutvecklare och van vid högnivåspråk, jag skriver i C och det får räcka. Kanske jag plockar upp några tricks på vägen hur olika kod är olika snabb men hur olika kan det vara från java? hur som helst går jag inte längre än så, men bra att känna till det du skrev.

Lite konstig filosofi med tanke på svaren du fått på din ursprungliga fråga.

Eftersom du frågar, det är en ruggigt stor skillnad på att skriva effektiv C kod för ett inbyggt system och att knacka algoritmiskt effektiva lösningar i Java. Wintersmith tar upp en viktig punkt som du uppenbarligen missförstått i ett av dina tidiga inlägg: minneshantering på realtidssystem. Detta är kanske en av de viktigaste skillnaderna mot att implementera motsvarande lösning i Java.
Citera
2020-08-14, 18:42
  #67
Medlem
Citat:
Ursprungligen postat av maco.81
Lite konstig filosofi med tanke på svaren du fått på din ursprungliga fråga.

Eftersom du frågar, det är en ruggigt stor skillnad på att skriva effektiv C kod för ett inbyggt system och att knacka algoritmiskt effektiva lösningar i Java. Wintersmith tar upp en viktig punkt som du uppenbarligen missförstått i ett av dina tidiga inlägg: minneshantering på realtidssystem. Detta är kanske en av de viktigaste skillnaderna mot att implementera motsvarande lösning i Java.

Ja, jag uppfattar minneshanteringen som den enda skillnaden. Han föreslog static, du föreslog stack, heap är ingen bra idé förstår jag. Jag tror jag kommer välja stack för att möjliggöra expansion av koden i framtiden, det är väldigt enkelt att välja mellan static/stack också.

Att gå ner hela vägen till assembler är orimligt för en algoritmutv., du skriver själv att det är väldigt sällan man skriver assembler idag så då måste ju kompilatorerna vara ganska bra, duger för mig.

Datastrukturer verkar kvitta för prestanda enligt en användare i tråden. Jag kör separata variabler.
Citera
  • 5
  • 6

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Det är enkelt att registrera ett nytt konto

Bli medlem

Logga in

Har du redan ett konto? Logga in här

Logga in