Permalänk
Medlem

Hårdvarunära programmering

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

Permalänk
Medlem
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.

Visa signatur

Arch - Makepkg, not war -||- Gigabyte X570 Aorus Master -||- GSkill 64GiB DDR4 14-14-15-35-1T 3600Mhz -||- AMD 5900x-||- Gigabyte RX6900XT -||- 2x Adata XPG sx8200 Pro 1TB -||- EVGA G2 750W -||- Corsair 570x -||- O2+ODAC-||- Sennheiser HD-650 -|| Boycott EA,2K,Activision,Ubisoft,WB,EGS
Arch Linux, one hell of a distribution.

Permalänk
Medlem

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å.

Visa signatur

.

Permalänk
Medlem

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

Skickades från m.sweclockers.com

Permalänk
Medlem
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.

Permalänk

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++.

Permalänk
Hedersmedlem

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.

Permalänk
Medlem

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

Permalänk
Inaktiv

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.

Permalänk

@anon159643:
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

Visa signatur

_________________________________________________________
Data 1: Gigabyte Z690 Elite AX, Intel 12900K, 32GB Corsair DDR5, PNY RTX 3080 12G, Lian Li O11D EVO

Permalänk
Medlem
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

Permalänk
Inaktiv
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)

Permalänk
Medlem
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

Visa signatur

CPU: Ryzen 9 3900x Noctua NH-D14 MOBO: TUF Gaming X570-PLUS GPU: GTX 980 RAM: 32 GB 3200 MHz Chassi: R4 PSU: Corsair AX860 Hörlurar: SteelSeries 840 Mus: Logitech G502 Lightspeed V.v. nämn eller citera mig för att få svar.

Permalänk
Inaktiv

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.

Permalänk
Medlem

@anon159643: 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.

Visa signatur

CPU: Ryzen 9 3900x Noctua NH-D14 MOBO: TUF Gaming X570-PLUS GPU: GTX 980 RAM: 32 GB 3200 MHz Chassi: R4 PSU: Corsair AX860 Hörlurar: SteelSeries 840 Mus: Logitech G502 Lightspeed V.v. nämn eller citera mig för att få svar.

Permalänk
Inaktiv
Skrivet av Haptic:

@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.

Permalänk
Medlem

@anon159643: 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.

Visa signatur

CPU: Ryzen 9 3900x Noctua NH-D14 MOBO: TUF Gaming X570-PLUS GPU: GTX 980 RAM: 32 GB 3200 MHz Chassi: R4 PSU: Corsair AX860 Hörlurar: SteelSeries 840 Mus: Logitech G502 Lightspeed V.v. nämn eller citera mig för att få svar.

Permalänk
Medlem

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.