Trädvy Permalänk
Medlem
Registrerad
Okt 2012

Hårdvarunära programmering

Vad menas med hårdvarunära programmering? Jag har googlat termen men får bara massa jobbannonser som resultat...

Trädvy Permalänk
Medlem
Plats
#Archlinux
Registrerad
Jun 2007
Skrivet av robbannn:

Vad menas med hårdvarunära programmering? Jag har googlat termen men får bara massa jobbannonser som resultat...

Programmering mot hårdvara, likt Arduino eller mot enkortsdatorer med assembler.

Arch - Makepkg, not war -||- Asus Crosshair Hero VI -||- GSkill 16GiB DDR4 15-15-15-35-1T 3600Mhz -||- AMD 1600x @ 4.1GHz -||- nVidia MSI 970 Gaming -||- Samsung 850 Pro -||- EVEGA G2 750W -||- Corsair 570x -||- Asus Xonar Essence STX -||- Sennheiser HD-650 -||
Arch Linux, one hell of a distribution.

Trädvy Permalänk
Medlem
Plats
Karlstad
Registrerad
Dec 2002

Assembler, embedded (firmwares etc), drivers etc. Är några jag kommer å tänka på direkt Mycket hänger ju ihop. Man skulle kunna säga att PLC-programmering ingår också. Kanske inte den hårdvara man i första hand tänker på.

[size="1"]*signatur raderad*, referrallänkar behöver vi inte gömma i signaturer (§8 marknadsföring)[/size] Till MOD: Ditt smartskafft, man gömmer inte något som är helt synligt!

Trädvy Permalänk
Medlem
Registrerad
Okt 2012

Tack för svar? Vad skulle hårdvarunära programmering med C++ innebära?

Skickades från m.sweclockers.com

Trädvy Permalänk
Medlem
Registrerad
Feb 2015
Skrivet av robbannn:

Tack för svar? Vad skulle hårdvarunära programmering med C++ innebära?

I stort sett samma sak som hårdvarunära programmering i valfritt annat språk.
D.v.s. man håller på och petar direkt på hårdvaruregister och liknande istället för att gå via något operativsystem.

Trädvy Permalänk
Medlem
Plats
Uppsala
Registrerad
Dec 2008

Hårdvarunära programmering brukar man typiskt prata om när man inte har ett operativsystem som sköter saker åt en, utan man måste läsa/skriva direkt mot I/O-portar eller devices du har på chippet eller kortet. Ett annat fall av hårdvarunära programmering är förstås om du skriver operativsystemet eller drivers som pratar med hårdvaran.

Det vanliga är man gör detta i C eller assembler. Det har debatterats i andra trådar här på forumet att det går att göra även i C++, men att man måste veta vad C++ gör bakom kulisserna för att det skall gå bra.

Ett exempel på hårdvarunära programmering I C++ är Arduino. Du skriver dina Arduino-program i en "hådvarusnäll" delmängd av C++. Det mesta av hårdvaruinteraktionen kan skötas via färdigskrivna bibliotek, men om du vill kan du gå direkt på I/O-portar och dylikt direkt i C++.

Trädvy Permalänk
Moderator
Plats
Linköping
Registrerad
Okt 2006

Jag skulle säga att det är när man behöver hantera minne(register, flyktigt minne, osv), pinnar, kommunikationsbussar och liknande snarare än att man jobbar koncentrerat med mer abstrakta objekt.

Har du åsikter om moderering, frågor eller något annat kan du kontakta mig via shimonu@sweclockers.com

Trädvy Permalänk
Medlem
Registrerad
Okt 2012

Det verkar vara svårdefinerat, hittar som sagt inget när jag googlar... Sitter någon inne på en bra definition tar jag tacksamt emot den!

Skickades från m.sweclockers.com

Trädvy Permalänk
Medlem
Plats
Karlstad
Registrerad
Nov 2010

Hårdvarunära programmering är precis som namnet säger när man programmerar i närheten av hårdvara. Man kan då i en applikation göra olika delar där olika delar är olika nära hårdvara. Om vi tar drivers som någon nämnde så pratar de oftast med en annan mjukvara och man behöver inte alls tänka på hårdvara. Men det blir en definitionsfråga på vad som är mjuk och hårdvara.
Ett grafikkort består ju av en massa mjukvara, om pratar man direkt emot denna mjukvara på ett grafikkort så pratar man då direkt emot hårdvaran?

Och då helt plötsligt är vi inne på området semantik, där ord man ska ta hänsyn till när man använder ett ord. Är det en plattannons så syftar de såklart på mer hårdvarunära än annars.
Så det jag påstår är alltså, om något är hårdvarunära programmering eller inte beror på vad svaret ska användas till. På samma sätt som att hur långt ett kort snöre får vara beror på omständigheterna.

Angående marknaden för hårdvarunära programmering så tycker jag den kraftigt har minskas i sverige, på 80 talet var detta the shit, i dag så görs väldigt mycket i andra länder och kvar är testning som kräver denna kunskap.

Jag själv sysslar mycket med kommunikation vad vissa skulle kalla för hårdvara, d.v.s. apparater och intelligenta givare m.m, men jag själv ser det bara som vilken mjukvara som helst.

Alltså givaren, så behöver jag inte alls bry mig om dens hårdvara, jag behöver dock se dens datablad för hur mjukvaran på givaren presenterar sin data.
För ni som sysslar med nätverk, tänk snmp emot en switch, ni kan läsa av en väldigt massa cool information där, men behöver ni bry er om switchens hårdvara? Ni som har kodat en applikation som kan skanna av nätverket och kontrollerat enheterna typer, konfiguration, driftstatus genom SNMP så har ni då programmerat hårdvarunära? -Hade ni gjort det i högstadiet så hade typ alla era datalärare sagt ja.

i7 7700 & Ryzen 1800X. Båda har 64GB ram, 500 GB 960 Evo m.2. Grafikkort är något jag hittade i en container..

Trädvy Permalänk
Medlem
Registrerad
Feb 2015

@Johan86c:
Jag håller inte alls med angående marknaden. På företaget jag arbetar på så hittar vi inga duktiga programmerare att anställa. Hos oss skulle en bra kille/tjej få jobb på 5 minuter

_________________________________________________________
Data 1: Gigabyte AB350N, Ryzen 1700, 16GB Corsair 3200, MSI 1080 Armor, Define Nano S
Data 2: MSI Z97i Gaming, 4690K, 16GB, Asus 1060 6GB, Silverstone RVZ02

Trädvy Permalänk
Medlem
Registrerad
Okt 2012
Skrivet av Faketastic:

@Johan86c:
Jag håller inte alls med angående marknaden. På företaget jag arbetar på så hittar vi inga duktiga programmerare att anställa. Hos oss skulle en bra kille/tjej få jobb på 5 minuter

Och hur skulle du definiera hårdvarunära programmering? Kan gärna ta några konkreta exempel på saker som faller inom ramen för det, om du har några.

Skickades från m.sweclockers.com

Trädvy Permalänk
Medlem
Plats
Karlstad
Registrerad
Nov 2010
Skrivet av Faketastic:

@Johan86c:
Jag håller inte alls med angående marknaden. På företaget jag arbetar på så hittar vi inga duktiga programmerare att anställa. Hos oss skulle en bra kille/tjej få jobb på 5 minuter

Som inom alla områden inom IT.
Nu vet jag inte vad exakt du sysslade med, jag själv läste typ ett halvår inbyggda system och fann typ inga jobb alls inom området mer än testning. På den tiden jag började skolan fanns det såna utbildningar som jag läste på vart enda ort, både på högskola och KY. Idag i västsverige är det nog bara Chalmers kvar. Visst vissa utbildningar som mekatronik kan läsa 3-5poäng mikrodatorteknik.

Nu har jag som sagt inte jobbat med området, men jag har sett någon som söker folk som arbetar med linuxkärnor i inbyggda system. Och det är så långt ifrån det jag gjorde på högskolan så det inte var klokt, det känns nästan som det som jag jobbar med idag. -Jag pratar också med hårdvara, även om det nu egentligen är mjukvaran i denna och jag inte alls behöver bry mig om hur hårvaran är.
*edit*
Nu har jag ej jobbat med linux i inbyggda system, så jag vet egentligen inte hur det är. Jag har dock blivit frågad flera gånger på jobbet om jag kan linux på hårdvarunivå då marknaden för såna personer är stor brist på.. Jag betvivlar dock att det i sammanhanget är så många som utvecklar där om man jämför emot andra områden.

*edit2*
En sådan här kurs vore ej fel: Linux i inbyggda system, 7.5 hp
http://www.umu.se/utbildning/program-kurser/kurs/?code=5EL207
(men jag får ej läsa mer)

i7 7700 & Ryzen 1800X. Båda har 64GB ram, 500 GB 960 Evo m.2. Grafikkort är något jag hittade i en container..

Trädvy Permalänk
Medlem
Plats
Stockholm
Registrerad
Jan 2011
Skrivet av robbannn:

Och hur skulle du definiera hårdvarunära programmering? Kan gärna ta några konkreta exempel på saker som faller inom ramen för det, om du har några.

Skickades från m.sweclockers.com

https://en.wikipedia.org/wiki/Low-level_programming_language

CPU: I7 4770k Noctua DH-14 MOBO: Maximus VI Hero GPU: Nvidia 980 RAM: 16 GB Corsair RAM 1600 MHz SSD: Corsair force GT 120 GB, OC Agility 3 120 GB HDD: WD 2TB Chassi: R4 PSU: Corsair AX860 Ljud: Asus Xonar D2X Hörlurar: AKG K 240 MK II Microfon: Modmic 4 Mus: Logitech G500s Matta: Steelseries QcK Mini Skärmar: en BenQ 22' och en Samsung 19'. V.v. citera mig för att få svar.

Trädvy Permalänk
Medlem
Plats
Karlstad
Registrerad
Nov 2010

Det finns helt klart ett samband med lågnivåspråk och hårdvarunära programmering, men jag skulle inte dra en hel parallell mellan de båda.
T.ex. assembler ser de flesta som hårdvarunära programmering, men ibland även C. Om språket C på en mikrodator ska vara hårdvarunära eller ej beror på situationen.
Om man t.ex. köper en Arduino och kör med någon färdig ramverk så kan man göra väldigt mycket utan att ett dugg behöva tänka på hårdvara, man programmerar på samma sätt som man gjorde sitt konsolprogram i windows med samma språk

Men det hela blir en semantisk fråga som jag nämnde.

i7 7700 & Ryzen 1800X. Båda har 64GB ram, 500 GB 960 Evo m.2. Grafikkort är något jag hittade i en container..

Trädvy Permalänk
Medlem
Plats
Stockholm
Registrerad
Jan 2011

@Johan86c: Läs stycket längst ner på wikipedia artikeln. Det tolkar jag som att tex C's if satser m.m är högnivå¨, men att den har lågnivå funktioner för att driva tex arduino pinnar.

Men även där så är det inte riktigt hårdvarunära, för man vet inte vilket register man petar på, bara att det ändrar en viss port.

CPU: I7 4770k Noctua DH-14 MOBO: Maximus VI Hero GPU: Nvidia 980 RAM: 16 GB Corsair RAM 1600 MHz SSD: Corsair force GT 120 GB, OC Agility 3 120 GB HDD: WD 2TB Chassi: R4 PSU: Corsair AX860 Ljud: Asus Xonar D2X Hörlurar: AKG K 240 MK II Microfon: Modmic 4 Mus: Logitech G500s Matta: Steelseries QcK Mini Skärmar: en BenQ 22' och en Samsung 19'. V.v. citera mig för att få svar.

Trädvy Permalänk
Medlem
Plats
Karlstad
Registrerad
Nov 2010
Skrivet av swehunter2000:

@Johan86c: Läs stycket längst ner på wikipedia artikeln. Det tolkar jag som att tex C's if satser m.m är högnivå¨, men att den har lågnivå funktioner för att driva tex arduino pinnar.

Men även där så är det inte riktigt hårdvarunära, för man vet inte vilket register man petar på, bara att det ändrar en viss port.

Ja man kan dela upp programmet. Sedan när man kodar assembler kanske man anropar en mikrokod i processon som sköter om all hårdvarunära-programmering: https://en.wikipedia.org/wiki/Microcode
Detta är inte alls mitt område och jag är dålig insatt hur mycket mikrokod som används vid instruktionsanrop etc.

Men även om man har absolut nada kontroll över processorn och kodar t.ex. helt vanlig java/C# och på detaljnivå styr en hårdvara, t.ex. en motor som man PID styr. Så anser jag att man faktisk programmerar motorn hårdvarunära.

*edit*
Egentligen så bryr man sig inte så mycket om hårdvara i assembler heller. Att spara ett värde i ett register, tusan så många hårdvarusteg som man hoppar över och man behöver inte ha ett dugg koll på hur processorn är uppbyggd. Inom mikrodatorer så ett utprintat instruktionslista på en A4 kommer man långt med, vad det är för processor behöver man inte ens veta.

Och här kommer semantik in igen. Varför vill frågeställaren veta om jobbet är hårdvarunära eller ej? Beroende på det så får frågeställaren av mig helt olika svar.

i7 7700 & Ryzen 1800X. Båda har 64GB ram, 500 GB 960 Evo m.2. Grafikkort är något jag hittade i en container..

Trädvy Permalänk
Medlem
Plats
Stockholm
Registrerad
Jan 2011

@Johan86c: Jupp, en mycket svår term att precist specificera! Men grund tanken är väl att man programerar direkt mot hårdvara, och själv kontrollerar hur protokoll m.m används. Detta tar också bort själva "plug n play" funktionen som de flesta operativ systemen har, då varje hårdvara har sina funktioner osv.

CPU: I7 4770k Noctua DH-14 MOBO: Maximus VI Hero GPU: Nvidia 980 RAM: 16 GB Corsair RAM 1600 MHz SSD: Corsair force GT 120 GB, OC Agility 3 120 GB HDD: WD 2TB Chassi: R4 PSU: Corsair AX860 Ljud: Asus Xonar D2X Hörlurar: AKG K 240 MK II Microfon: Modmic 4 Mus: Logitech G500s Matta: Steelseries QcK Mini Skärmar: en BenQ 22' och en Samsung 19'. V.v. citera mig för att få svar.

Trädvy Permalänk
Medlem
Registrerad
Maj 2004

Säg att du är en officer inom militären. Du vill att någon under dig ska utföra ett arbete. Exempelvis skotta snö på kaserngården.

Du skulle kunna gå in på logementet och säga "kaserngården behöver skottas". Och några värnpliktiga gör jobbet från början till slut. Det skulle kunna sägas att du använder en förhållandevis hög nivå. Du använder ett högnivå språk utan särskilt mycket detaljer. Du räknar med att de värnpliktiga kommer göra rätt.
Fördelen för dig är att det är snabbt och enkelt. Nackdelen kan vara att du inte kan styra exakt hur jobbet blir gjort.

Istället skulle du kunna säga till närmsta värnpliktiga att resa sig. Klä på sig. Gå ut på gården. Plocka upp snöskyffeln. Skjut snön framåt. Skotta ut den åt sidan. Eller på ännu lägre nivå.. Sätt ned skyffeln, tag ett steg framåt, tag nästa steg etc etc.

Ju mer detaljerat och ju mindre utrymme för tolkning du ger personen i fråga desto mer maskinnära programmerar du honom eller henne.