Svenska ElektronikForumet
https://elektronikforumet.com/forum/

Har alla uC pattformar Hardware Abstraction Layer (HAL) ?
https://elektronikforumet.com/forum/viewtopic.php?f=7&t=93634

Författare:  Al_Bundy [ 16.45 2019-01-02 ]
Inläggsrubrik:  Har alla uC pattformar Hardware Abstraction Layer (HAL) ?

STM32 är den plattform jag använder. Jag har gått från Arduino till SM32 av just pris och snabbhet. Det jag tycker är perfekt med STM32 är just deras Hardware Abstraction Layer (HAL) där man kan enkelt använda färdiga funktioner för att styra GPIO pinnar. Man behöver inte vara någon C-expert eller ens hålla på med bitoperationer med STM32. Undantag kanske finns t.ex. SPI, I2C osv när man behöver ange hex eller binärt för att tala med någon extern enhet.

Men har PIC, AVR 8080 osv Hardware Abstraction Layer ? Eller gäller det att dyka sig ned i databalet och hitta de 1:or och 0:or som man behöver för att tända en lampa?

Författare:  sodjan [ 16.49 2019-01-02 ]
Inläggsrubrik:  Re: Har alla uC pattformar Hardware Abstraction Layer (HAL)

HAL är programvara, det är inget som är inbyggt i, eller kommer med, hårdvaran.
Man kan så klart skriva en HAL till vilken hårdvara som helst, om det är motiverat...

Författare:  Al_Bundy [ 17.01 2019-01-02 ]
Inläggsrubrik:  Re: Har alla uC pattformar Hardware Abstraction Layer (HAL)

Blir enklare. Man slipper hålla på med krångel. :)

Författare:  AndLi [ 17.01 2019-01-02 ]
Inläggsrubrik:  Re: Har alla uC pattformar Hardware Abstraction Layer (HAL)

Du får det att låta som att det krävs något stöd i hårdvaran, det är ju bara frågan om någon tyckt att det varit lönt att skriva ett bibliotek för att hantera hårdvarufunktionerna.
Eftersom det kostar massor av klockcykler är det ovanligare på mindre system, där man helt enkelt inte har råd att förenkla för högnivåprogrammerare.

AVR har ju arduino som ju kan ses som samma sak...

STM32 HAL är såklart tillgänglig som källkod, det tar inte mycket genombläddring innan man inser hur otroligt mycket extra kod som exekveras för att göra det möjligt att supporta många av de mode som hårdvaran klarar.
Men har man råd att slänga i mer kisel för att kompensera för sin högnivåkodningsstil så är det ju trevligt..
Sen är ju frågan hur vältestat HAL:en är i just ditt användarfall, tidigare versioner har jag hittat buggar i bara genom att köra UARTEN i standardmode.

Leverantören vill ju också binda fast din kod hårdare mot deras µC, och på så sätt öka kostnaderna för att välja någon annans cortex uC.

Jag föredrar att skriva min HAL funktioner själv för att veta vad de faktisk manipulerar för register, kräver mer läsning av datablad, men också en större förståelse när saker inte funkar....

Författare:  Al_Bundy [ 17.11 2019-01-02 ]
Inläggsrubrik:  Re: Har alla uC pattformar Hardware Abstraction Layer (HAL)

Tack! Det var bra förklarat. Så om man väljer STM's HAL så blir man låst till STM produkter och skulle man vilja köra andras plattformar så är man på noll igen?

Författare:  AndLi [ 17.26 2019-01-02 ]
Inläggsrubrik:  Re: Har alla uC pattformar Hardware Abstraction Layer (HAL)

Va fan Bundy, blev du träffad av en raket vid nyår, säg inte att du faktisk läste någon annans inlägg 8)

Författare:  Al_Bundy [ 17.27 2019-01-02 ]
Inläggsrubrik:  Re: Har alla uC pattformar Hardware Abstraction Layer (HAL)

Kæften ;)
Ni övriga är så blinda och tror att man kan svara på allt. Bortskämdhet :P

Författare:  Klas-Kenny [ 17.39 2019-01-02 ]
Inläggsrubrik:  Re: Har alla uC pattformar Hardware Abstraction Layer (HAL)

Al_Bundy skrev:
Tack! Det var bra förklarat. Så om man väljer STM's HAL så blir man låst till STM produkter och skulle man vilja köra andras plattformar så är man på noll igen?


Tillbaka på noll, knappast.
I de flesta program så är ju bara en bråkdel av koden på något sätt hårdvaruberoende. Att porta ett välskrivet program till en annan plattform är ofta inget större problem, får bara göra om några få funktioner (de som styr hårdvara).

Författare:  Al_Bundy [ 17.59 2019-01-02 ]
Inläggsrubrik:  Re: Har alla uC pattformar Hardware Abstraction Layer (HAL)

Kanske när det gäller mig. Jag är egentligen inte hårdvaruprogrammerare över huvud taget. Jag läste mer matematik än programmering.

Författare:  Mr Andersson [ 18.13 2019-01-02 ]
Inläggsrubrik:  Re: Har alla uC pattformar Hardware Abstraction Layer (HAL)

Låst blir man inte. Däremot kanske du någon gång skulle vilja uppgradera processorn. Då blir det mindre jobb att gå från ST till ST än från ST till någon annan tillverkare. Det finns även en viss övertro hos vissa att bara för att koden kommer direkt från ST skulle den vara bättre än något man kan göra själv.
Detta kanske gör att nästa processor också blir en ST även om det finns billigare eller bättre alternativ. Det är detta man kallar inlåsningseffekt.

Författare:  TomasL [ 19.04 2019-01-02 ]
Inläggsrubrik:  Re: Har alla uC pattformar Hardware Abstraction Layer (HAL)

Du måste alltid i alla lägen ha någon variant av HAL, eftersom du på ett eller annat sätt måste beskriva den fysiska layouten för programmet.
Om man sedan kallar det för HAL eller nåttt annat är rätt ointressant.
HALen kan vara allt från nån enstaka #define till mer avancerade konstruktioner.

Författare:  jesse [ 19.13 2019-01-02 ]
Inläggsrubrik:  Re: Har alla uC pattformar Hardware Abstraction Layer (HAL)

Klas-Kenny skrev:
Al_Bundy skrev:
Tack! Det var bra förklarat. Så om man väljer STM's HAL så blir man låst till STM produkter och skulle man vilja köra andras plattformar så är man på noll igen?


Tillbaka på noll, knappast.
I de flesta program så är ju bara en bråkdel av koden på något sätt hårdvaruberoende. Att porta ett välskrivet program till en annan plattform är ofta inget större problem, får bara göra om några få funktioner (de som styr hårdvara).

Vet inte om jag håller med om det där. Mina försök att programmera 32-bitars MCU via "HAL" brukar sluta med 10k-rader med obegriplig kod som hanterar en väldigt unik HAL samt 1k.rader som utför själva funktionen. Jag kan alltså återanvända max 10% av koden. Resten får jag göra om beroende vilken µ-controler jag ska använda.

Författare:  Klas-Kenny [ 19.33 2019-01-02 ]
Inläggsrubrik:  Re: Har alla uC pattformar Hardware Abstraction Layer (HAL)

Jesse: Jag använder i princip aldrig tillverkarens rutiner utan skriver mina egna.

Ska man då använda tex. SPI, så landar det hela till slut i typ en funktion "uint8_t spiWriteByte(uint8_t sendData)", vilket är det enda som behöver skrivas om ifall man byter uC, plus några rader initiering då. Och ett interrupt kanske, men samma sak där, interruptet kan vara i princip likadant oavsett hårdvara.

Eller sätta någon GPIO, så blir det bara en enkel funktion (eller oftast ett macro) för att sätta värdet på den specifika pinnen (setRedLedHigh() eller något). Bara den funktionen som behöver ändras.

Osv osv osv,

Själva "hjärtat" i programmet, som faktiskt gör det jag önskar, kan vara så gott som intakt.

Författare:  Icecap [ 19.35 2019-01-02 ]
Inläggsrubrik:  Re: Har alla uC pattformar Hardware Abstraction Layer (HAL)

Oftast är det bara hårdvaran som ska "ställas om" vid byte, källkoden som sådan kan fortsatt fungera utmärkt.

Alltså ska man dela upp sin kod i hårdvaru-delen - som oftast gör att man ska läsa - och förstå - datablad.

Jag har gjort en styrning där det blev gjort två versioner hårdvara, den ena med en Fujitsu µC och den andra med en Renesas M16C.

Vid kompileringen användes samma källkod till allt med styrningen och hårdvaru-delen sköttes med et direktiv om vilken kompiler som kördes. Fungerade perfekt.

Författare:  jesse [ 20.04 2019-01-02 ]
Inläggsrubrik:  Re: Har alla uC pattformar Hardware Abstraction Layer (HAL)

Det verkar ju i alla fall inte fungera så bra om man använder sig av CubeMX.... Då fylls main.c med en massa hårdvaruspecifik kryptisk goja.... som sedan trasslar sig in i det mesta man ska göra.... (jag hatar detta. Har inte vant mig vid 32-bitars MCU än :( )

Författare:  AndLi [ 20.15 2019-01-02 ]
Inläggsrubrik:  Re: Har alla uC pattformar Hardware Abstraction Layer (HAL)

Självklart går det att skriva HALs som på ett snyggt och smidigt sätt separerar hårdvara och mjukvara, och som vid processorbyte/tillverkarbyte skapar minimalt arbete i mer än drivrutinerna.

MEN det har inte varit fokus för ST när de gjort sin CubeMX och HAL, det är bara att skapa ett projekt och titta i mainfilen, som är fullständigt nerkletad med Hårdvarunära kod (för att ställa in div klockor, initiera saker).
Det skulle det funnits en clockInit() funktion först, där sen koden ligger i därför avsedd c fil. OCh en fin main som kallar ens olika submoduler i nån slinga.

Många av ST HAL funktioner känns relativt högnivå, så de har en tendens att hamna relativt högt upp i kod-hirakin, där de egentligen inte har något att göra. Ska man byta uC får man då också implementera om mycket av den funktionalitet ST har lagt in i sin HAL.

Men visst funkar ST HAL, jag har i mitt hempulprojekt bytt µC tre gånger inom STM32F4 familjen, och det har bara varit att ange rätt startup fil och sätta #definen som specar vilken µC jag använder. (Och visst kasta om vilken pinne som används till vad eftersom jag också bytt utvecklingskort, men det kan man ju inte skylla ST för..)

Författare:  Al_Bundy [ 00.32 2019-01-03 ]
Inläggsrubrik:  Re: Har alla uC pattformar Hardware Abstraction Layer (HAL)

Jag tycker att HAL är helt underbart! Jag har aldrig kommit igång så fort med riktig hårdvara. Synd bara att man inte kan köra Java på en STM32. STM gjorde ST-kort förut som man kunde köra Java på.

Men det blev nog inget gott resultat då korten blev dyra och ingen köpte. Så jag får fortsätta med Java när jag gör IoT-saker på enkortsdatorer :)

Författare:  Gimbal [ 10.36 2019-01-03 ]
Inläggsrubrik:  Re: Har alla uC pattformar Hardware Abstraction Layer (HAL)

Det är snudd på sexistiskt att diskutera pattformar skulle jag vilja påstå.

Författare:  Klas-Kenny [ 11.01 2019-01-03 ]
Inläggsrubrik:  Re: Har alla uC pattformar Hardware Abstraction Layer (HAL)

jesse skrev:
Det verkar ju i alla fall inte fungera så bra om man använder sig av CubeMX.... Då fylls main.c med en massa hårdvaruspecifik kryptisk goja.... som sedan trasslar sig in i det mesta man ska göra.... (jag hatar detta. Har inte vant mig vid 32-bitars MCU än :( )


Låt bli CubeMX då.

32bit är i princip inte svårare än 8bit. Läs datablad och referensmanual och prata direkt med hårdvaran istället för att använda HAL, så förstår du hur det fungerar och inser att det inte är någon större skillnad. Mer än att 32bittarna ofta har lite fler och mer avancerade periferier och således lite mer register, men inte farligt. Blir bara en väldigt lång referensmanual med alla olika periferier.

Gjorde samma misstag då jag började med 32bit ARM ifrån 8bit PIC, använde ST's HAL och förstod ingenting av vad jag gjorde. Sen jag insåg att det egentligen inte är någon skillnad, och all info finns i referensmanual, har det hela gått hur bra som helst. :)

Författare:  lillahuset [ 11.11 2019-01-03 ]
Inläggsrubrik:  Re: Har alla uC pattformar Hardware Abstraction Layer (HAL)

Man skriver lämpligen ett HAL steg för steg när man behöver använda nya periferienheter eller funktioner. Då är det bra att samtidigt skriva lite testkod.

Författare:  AndLi [ 11.12 2019-01-03 ]
Inläggsrubrik:  Re: Har alla uC pattformar Hardware Abstraction Layer (HAL)

Jag känner igen mig i Klas-Kennys beskrivning..
Brukar ibland titta i ST-HAL kod för att se vad jag missat ställa in när saker inte funkar, men oftast blir man bara mer förvirrad...
IAR exempelbibliotek är också ganska trevligt om man vill köra barebone (men de är ju inte gratis)

Energy Micros(numera silabs) HAL verkade lite trevlig, dock var deras utvecklingskort mer svårtillgängliga än ST, så det blir ju lätt att man tar första bästa kort om man vill göra någon prototyp, och de har ju en förmåga att bli kvar i slutprodukten.
Det är ju inte en slump att ST utvecklingskort är billiga..

lilahuset: men då måste man ju kunna koda....

Författare:  Al_Bundy [ 11.30 2019-01-03 ]
Inläggsrubrik:  Re: Har alla uC pattformar Hardware Abstraction Layer (HAL)

Själv måste jag ha HAL, för jag förstår bara en processor lika mycket som jag förstår en PLC.

Jag programmerar mycket inom Codesys, TTcontrols produkter, IX-developer, Java och nu blir det STM32. Så jag har inte tid att lära mig hårdvaran på det svåra sättet. Jag håller ju på mycket med beräkningar via MATLAB också. Samt hemsidor gör jag också.

Författare:  lillahuset [ 11.58 2019-01-03 ]
Inläggsrubrik:  Re: Har alla uC pattformar Hardware Abstraction Layer (HAL)

Tråkigt för dig Al. Du får väl dumpa något då, STM32 tex.

Författare:  Rick81 [ 11.59 2019-01-03 ]
Inläggsrubrik:  Re: Har alla uC pattformar Hardware Abstraction Layer (HAL)

Det finns även en LL (Low Layer) del i HAL som ger åtkomst på lägre nivå till hårdvara.

HAL är bra för att snabbt komma igång, men sen går det ju alltid anpassa eftersom man får all källkod och man kan ju gå ned i HAL för att se vilka register som sätts. Sen är ju alltid exempelkod bra och där tycker jag ST är ett föredöme

Författare:  Al_Bundy [ 12.08 2019-01-03 ]
Inläggsrubrik:  Re: Har alla uC pattformar Hardware Abstraction Layer (HAL)

lillahuset skrev:
Tråkigt för dig Al. Du får väl dumpa något då, STM32 tex.


Eller så använder med ST's HAL? Fungerar utmärkt. Man behöver inte kunna allt.

När jag gick i på universitetet så var det bara teori teori teori teori och våra doktorer som lärare beskrev som att utan teorin så är man helt borta. När jag är ute på arbetslivet så vill företagen/kunderna bara att jobbet ska vara klart så fort som möjligt. De bryr sig inte om teori eller hur smart man är. Så länge pengar rullar in. Dessutom så får man använda verktyg också som gör det grova jobbet.

Det var verkligen ett stort kliv från teori till praktiken ska jag säga. Praktiken var betydligt mycket svårare än teorin för praktiken så var det mer "gör det bara!" och det ska gå snabbt.

Författare:  säter [ 12.10 2019-01-03 ]
Inläggsrubrik:  Re: Har alla uC pattformar Hardware Abstraction Layer (HAL)

Tur att man inte är kund hos dig. :)

Författare:  Al_Bundy [ 12.18 2019-01-03 ]
Inläggsrubrik:  Re: Har alla uC pattformar Hardware Abstraction Layer (HAL)

Så där ser det ut i hos de flesta företag ska du veta. Det har inget med hur ingenjörerna är, utan det sitter i styrelsen. Styrelsen finns det bara kaffedrickande ekonomer och utbildade projektledare som ska diskutera framtidens produkter.

Författare:  säter [ 12.21 2019-01-03 ]
Inläggsrubrik:  Re: Har alla uC pattformar Hardware Abstraction Layer (HAL)

Jag tror att de flesta seriösa företag vill ha en fungerande produkt, även om det blir dyrt.

Författare:  Al_Bundy [ 12.26 2019-01-03 ]
Inläggsrubrik:  Re: Har alla uC pattformar Hardware Abstraction Layer (HAL)

Visst bordet det vara så. Men i verkligheten så är det inte användarna som kollar på priset, det är dem som ska betala fakturan.

Jag brukar säga samma sak åt dem som säger "En PID duger". Finns ju en hel del på detta forum som håller PID:en nära kärt.
Jag brukar tolka detta som att dem kan inget mer än just vanlig enkel reglerteknik på grundnivå, om ens det.

De flesta kan inte ens redovisa teorin varför en PID regulator inte tål frekvenser.

Alla tidsangivelser är UTC + 1 timme
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/