FAQ: Vastauksia kysymyksiin ja palautteeseen¶
Tällä sivulla vastaamme C-kielen osuudesta luento- ja harjoituspalautteessa esitettyihin kysymyksiin ja kommentteihin luentokappaleittain.
Kurssin suorituksesta¶
Q: Kurssi jäi kesken edellisenä vuonna.. pitääkö nyt aloittaa alusta?
A: Ei. JTKJ- ja/tai TKJ-kurssien suoritukset ovat voimassa yhden vuoden ajan, joten sinun tarvitsee suorittaa vain puuttuvat moduulit. Sinun on kuitenkin suoritettava koko moduuli: Moduuli 1, Moduuli 2, Moduuli 3 ja/tai Moduuli 4.
Q: Mitä täsmälleen tarkoittaa harjoitustehtävien deadline?
A: Arvosanaan lasketaan deadlineen mennessä suoritetut pisteytetyt harjoitustehtävät luentokappaleista 1-12. Kaikki nämä tehtävät löytyvät materiaalista Harjoitus-alasivuilta. Luentomateriaalin seassa olevia johdanto- tai pisteyttämättömiä luentotehtäviä ei lasketa arvosanaan.
Q: Tuleeko harjoitustehtävissä pisterangaistusta, jos yrittää samaa tehtävää useammin?
A: Ei tule. Jokaista tehtävää saa yrittää niin monesti kun on tarpeen. Tehtäväpisteet saa kun tarkistin hyväksyy vastauksen. Emme kuitenkaan suosittele Lovelacen käyttämistä C-kielen virheentarkistajana.. mieluummin kysykää assistenteilta. On vain yksi poikkeus. Joissakin tehtävissä on rajoitettu vastausten lukumäärää. Jos ylität rajan, tehtävääsi ei arvioida.
Q: Laboratorioharjoitus-viikon aikataulu ei minulle kertakaikkiaan sovi!
A: Keskustele kurssin henkilökunnan kanssa. Ilman harjoituksia et voi saada kehitysboardia.
Q: Voiko harjoitustyön tehdä Arduinolla tai muulla alustalla?
A: Yleisesti, ei voi. Tosin, jos olet tehnyt sulautetun järjestelmän harrastuksena tai vastaavana käyttäen Arduinoa tai vastaavaa alustaa, voit ehdottaa sitä, ja katsomme, täyttääkö se kurssiprojektin vaatimukset..
Q: Sivuaineopiskelijana (tai vastaavana) suoritan yhtaikaa Ohjelmoinnin Alkeet-kurssia ja JTKJ-kurssia. Nyt minulla on vaikeuksia suoriutua JTKJ-tehtävistä, koska ne edellyttävät osaamista, jota OA-kurssilla ei ole vielä käsitelty.
A: OA-kurssi vaaditaan JTKJ:n esitietoina. Kursseja ei ole laadittu niin, että ne voisi suorittaa yhtaikaa eikä kurssimateriaalia ole mitenkään synkronoitu. Me kurssien opettajat emme voi asiaan vaikuttaa, joten antakaa palautetta opinnoistanne vastaaville henkilöille.
Q: En asu Oulussa. Voinko suorittaa kurssin etänä?
A: Kurssi kuuluu lähiopetuspohjaiseen tutkinto-ohjelmaan, ja läsnäolo voi olla pakollista tietyissä tilaisuuksissa, kuten laboratorioharjoituksissa tai loppukokoontumisissa. Tilanteesta riippuen kurssin henkilökunta voi tarjota vaihtoehtoja, mutta nämä käsitellään tapauskohtaisesti eikä niitä taata (poikkeukset hylätään yleensä). Joka tapauksessa opiskelijan on itse huolehdittava siitä, että hän hankkii kehitysalustan. Emme missään olosuhteissa lähetä laitteistoa postitse.
Lovelacesta¶
Q: Tarkistinohjelma kaatuu koko ajan.
A: Tällaisesta tiedosta olemme varsin kiinnostuneita. Voitko tulla näyttämään harjoituksiin tai lähettää viestiä, miten tarkalleen kaatuminen tapahtuu? Mukaan mielellään vastauksesi URL.
Kun saat JSONDecodeError-virheen Lovelacessa, se tarkoittaa yleensä, että koodissasi on muistiin liittyviä ongelmia (käytännössä yrität käyttää muistipaikkoja, joita sinun ei pitäisi käyttää, esim. ylivuoto). Tällöin tarkistin lopettaa prosessin. Tarkista huolellisesti silmukat ja varmista, ettet yritä lukea/muokata taulukon paikkoja, jotka ovat sen rajojen ulkopuolella.
Emme voi tehdä mitään, jos tarkistin kaatuu, kun palautuksesi rikkoo muistirajoja. Tarkistimesta ei ole mahdollista saada mitään tietoa ulos, koska käyttöjärjestelmä tappaa koko prosessipinon välittömästi, kun yrität käyttää muistia varatun alueesi ulkopuolelta. Jos saat "tarkistin kaatui" -raportin, ohjelmassasi on todennäköisesti tämä ongelma.
Q: Laitoin tehtävävastauksen koodia palautteeseen, enkä ole kuullut siitä sittemmin. Missä vika?
A: Palaute näkyy meille anonyymisti, joten emme tiedä keneen olla yhteydessä. Ja emme julkaise vastauksia tehtäviin, ainakaan ennenkuin deadline on paukkunut.
C-kielen harjoitustehtävät (Mooduli 1)¶
Codeblocks¶
Q: Kun kääntää/suoritan koodin Codeblocksissa, saan tämän viestin: undefined reference to 'WinMain
A:
Tarkista, että
A:
Tarkista, että
main funktio on toteutettu. Tarkista, että
main funktio on vain yhdessa tiedostossa. Tarkista, että olet luonut "Console application" projectin, etkä "Windows GUI".
Käynnistä Codeblocks uudelleen.
3. Bitit ja lukujärjestelmät¶
Q: Hihat palaa lukujärjestelmämuunnoksia ja bittioperaatioita tehdessä... ja hei laskimet on keksitty!
A: Nämä asiat ovat tieto/sähköinsinöörin sen verran perusosaamista, että ne pitäisi kyllä mennä päässälaskuna..
Q: Miten voin esittäää binääriluvun C:llä? Netissä käytettiin etuliitettä 0b.
A: Etuliite 0b ei ole standardinmukaista C:tä, vaan kääntäjien lisäominaisuus. Kurssilla käytettävässä gcc:ssä se nyt sattuu toimimaan.
Binääriluvut on kyllä helppo esittää heksalukuina, kts luentomateriaali.
Q: Heksadesimaalissa yleensä negatiivinen on miinus (-) merkki eikä 8(0b1000) -> ylöspäin olevat bitit.
A: Totta, heksadesimaalien kanssa voi käyttää myös miinusmerkkiä. Tietokone toki käsittelee myös nämä miinusmerkkiset heksaluvut 2-komplementtilukuina, eli kääntäjä tekee sisäisesti itse muunnoksen.
Huomataan, että sijoitus
int8_t neg = -0x81 (ikäänkuin "kaksi miinusmerkkiä") ei mahdu lukualueeseen, vaan tarvitsee 9. merkkibitin, jolloin 8. bitti luetaan lukuarvoon kuuluvaksi. Kurssilla haluamme käyttää 2-komplementtiesitystä. Esimerkiksi, oheislaitteen laiterekisteriä lukiessa ainoa tapa välittää sekä positiivisia ja negatiivisia lukuja on 2-komplementtiesitys.
5. Bittioperaatiot C-kielessä¶
Q: Jos hiuksia halotaan niin eikö lopussa olevasta operaatioiden suoritusjärjestys -taulukosta puutu vasemmalta oikealle suoritettavat viittauksen jälkeiset sijoitusoperaattorit ++ ja --? Taulukosta löytyvät käsittääkseni vain oikealta vasemmalle suoritettavat "sijoita ensin ja viittaa nyt" ++ ja -- operaattorit. Esimerkki:
uint8_t n = 4;
printf("%d\n", n++); // <- puuttuu, palauttaa 4
printf("%d\n", ++n); // palauttaa 6
printf("%d\n", --n); // palauttaa 5
// jostain syystä näissä silmukoissa toimii myös ++i ja --i täysin samoin kuin i++ ja i--?!?
for (uint8_t i; i < 10; i++) {}
for (uint8_t i; i < 10; ++i) {}
A: Hyvä kysymys, tähän liittyy useampikin asia.
1) Taulukossa on tarkoitus kuvata suoritusjärjestystä laskevasti riveittäin niin, että ylempänä on korkeampi suoritusjärjestys (ts. prioriteetti) ja riveillä se riippuu suoritussuunnasta.
Suoritussuunta tarkoittaa sitä, että jos meillä on saman prioriteetin operaattoreita useampi samassa lauseessa, niin miten päin niiden suoritusjärjestys tulkitaan, oikealta vasemmalle vai vasemmalta oikealle? Operaattorilla Q:
(a Q b) Q c vai a Q (b Q c)? Kurssilla sulkeita käyttämällä ei näistä tarvitse murehtia. 2) Lisäksi, näiden unaaristen operaattorien käytössä funktion parametreinä tulee olla varovainen, koska arvojen laskentajärjestys (sidontajärjestys) on kääntäjäriippuvainen. Asiaa on käsitelty oppikirjassa (Kernigham & Ritchie, kpl 2.12).
// Tässä ei tiedetä kumpi operaatio suoritetaan ensin, ++ tai pow()
printf("%d %d", ++n, pow(2,n));
// Selkeä tapa tehdä tämä olisi (esimerkiksi)
++n;
printf("%d %d", n, pow(2,n));
3) Vielä, for-lauseella on aina sama suoritusjärjestys niin, että sijoitusoperaatio tulee viimeisenä. Ei siis ole väliä miten ++-operaattori on käytössä, koska se suoritetaan aina iteraation lopussa.
7. Ohjausrakenteet C:ssä¶
Q: En saa tulostettua 64-bittisiä lukuja printf:llä. (Googlella löysin kummallisen %PRI64d-määrevakion, jolla homma onnistuu..)
A: Isojen lukujen tulostaminen saattaa (arkkitehtuurista ja kääntäjästä riipuen) vaatia muotoilumääreen
%lld (long long int) käyttöä, kun "pelkkä" %ld ei riitä. Jossain kääntäjissä voi tarvita tässä %i64d-muotoilumäärettä. Raspberry Pi Pico ja TKJHATin ohjelmointi¶
Q: Kaikki koodi on GitHubissa, mutta en osaa käyttää GIT:iä. Mitä minun pitäisi tehdä?
A: Git on perustyökalu missä tahansa projektissa työskenneltäessä. Se ei kuitenkaan kuulu tämän kurssin sisältöön, joten voit suorittaa kaikki tehtävät ja harjoitukset ilman GIT:iä. Lataa GitHub-projekti zip-tiedostona ja pura se kansioon tiedostojärjestelmässäsi. Harjoitus 1 tarjoaa sinulle hyvän vaiheittaisen ohjeen sen tekemiseen.
A: Git on perustyökalu missä tahansa projektissa työskenneltäessä. Se ei kuitenkaan kuulu tämän kurssin sisältöön, joten voit suorittaa kaikki tehtävät ja harjoitukset ilman GIT:iä. Lataa GitHub-projekti zip-tiedostona ja pura se kansioon tiedostojärjestelmässäsi. Harjoitus 1 tarjoaa sinulle hyvän vaiheittaisen ohjeen sen tekemiseen.
Q: Voinko käyttää omaa tietokonettani ohjelmointiin? En pääse kampukselle / laboratoriot ovat kiinni silloin kun minulla on aikaa...
A: Kyllä voit. Sinulla on kaksi vaihtoehtoa: lataa kurssin virtuaalikone (suositeltu) tai asenna ympäristö omaan koneeseesi.
Q: Pitääkö minun käyttää kurssin virtuaalikonetta?
A: Tämä on suositeltu vaihtoehto. Voit halutessasi asentaa järjestelmän omaan koneeseesi.
Q: Pico ei yhdistä / en saa ladattua koodia
A: Tarkista seuraavat asiat:
1. Varmista ensin, että koodisi kääntyy virheittä.
2. Muista, että koodin lataaminen Picoon edellyttää BOOTSEL-tilaa (pidä painiketta painettuna).
3. Jos käytät VM:ää, varmista että valitset laitteen valikosta Devices > USB. Voit tallentaa suodattimen, jotta tätä ei tarvitse tehdä joka kerta (katso Session 1). Muista, että tietokone voi nähdä laitteen kolmella eri tavalla: Raspberry Pi RP2 Boot kun laite on boot-tilassa; Raspberry Pi Pico (normaalissa suoritustilassa) tai University of Oulu TKJHAT, jos käytät tarjottua
A: Tarkista seuraavat asiat:
1. Varmista ensin, että koodisi kääntyy virheittä.
2. Muista, että koodin lataaminen Picoon edellyttää BOOTSEL-tilaa (pidä painiketta painettuna).
3. Jos käytät VM:ää, varmista että valitset laitteen valikosta Devices > USB. Voit tallentaa suodattimen, jotta tätä ei tarvitse tehdä joka kerta (katso Session 1). Muista, että tietokone voi nähdä laitteen kolmella eri tavalla: Raspberry Pi RP2 Boot kun laite on boot-tilassa; Raspberry Pi Pico (normaalissa suoritustilassa) tai University of Oulu TKJHAT, jos käytät tarjottua
usb-debug-kirjastoa.Q: Jotain kummaa tapahtuu, mutta en hoksaa koodista mistä on kyse.
A: Tämän voi vianjäljittää vähintään kolmella tavalla:
1. Käytä debug-tulosteita (esim.
2. Käytä vilkkuvaa LEDiä ohjelman etenemisen seuraamiseen.
3. Voit aina kysyä opetusassistentilta chatissa tai harjoitusten aikana.
1. Käytä debug-tulosteita (esim.
printf) ohjelman etenemisen seuraamiseen.2. Käytä vilkkuvaa LEDiä ohjelman etenemisen seuraamiseen.
3. Voit aina kysyä opetusassistentilta chatissa tai harjoitusten aikana.
Hyvä ratkaisu koodiongelmien itsenäiseen vianjäljitykseen on käyttää sekä debug-tulosteita että LEDiä samanaikaisesti!
Q: Miksi Pico jää jumiin itsekseen heti käynnistettäessä tai ajon aikana?
A: Tähän voi olla useita syitä:
1. Olet unohtanut luoda tehtävät tai kutsua
2. Laitteesta loppuu muisti. Tarkista ainakin seuraavat asiat:
1. Olet unohtanut luoda tehtävät tai kutsua
vTaskScheduler();2. Laitteesta loppuu muisti. Tarkista ainakin seuraavat asiat:
- Tehtävien pino (stack) voi olla tarpeettoman suuri. Yleensä yli 2048 sanan
STACKSIZEei ole tarpeen. Usein pienempi pino, kuten 512 / 1024 sanaa, riittää hyvin. - Anturidatan keräämiseen käytettävä taulukko voi olla liian suuri, erityisesti ICM-42670-P -anturilla.
3. Keskeytysrutiini (ISR), joka kestää liian kauan, voi aiheuttaa laitteen jumiutumisen, koska muu toiminnallisuus (myös RTOS) ei pääse etenemään. Siirrä toiminnallisuus pois keskeytyksestä tehtävän koodiin ja hallitse suoritusta tilakoneen avulla. Usein (käytännössä aina) paras käytäntö on, että keskeytysrutiini ainoastaan asettaa tilamuutoksen, johon tehtävät reagoivat.
4. Unohtunut
5. Pico yrittää käyttää kahta tai useampaa I2C:hen liitettyä anturia tai toimilaitetta eri tehtävissä samanaikaisesti. Tämä on mahdollista, mutta tiloja on käytettävä oikein, jotta niitä ei käytetä samanaikaisesti.
4. Unohtunut
vTaskDelay() aiheuttaa tehtävän jatkuvan suorittamisen ilman taukoa, tai tehtävässä on tarpeettoman pitkäkestoinen prosessi, jolla on alempi prioriteetti.5. Pico yrittää käyttää kahta tai useampaa I2C:hen liitettyä anturia tai toimilaitetta eri tehtävissä samanaikaisesti. Tämä on mahdollista, mutta tiloja on käytettävä oikein, jotta niitä ei käytetä samanaikaisesti.
Q: Miksi muita Taskeja ei suoriteta, kuin yhtä?
A: Todennäköisesti suoritettavassa tehtävässä ei ole
vTaskDelay()-kutsua, mikä estää muita tehtäviä saamasta suoritusaikaa.Q: Koodi ei tee sitä mitä odotin, vaan jotain aivan muuta
A: Tarkista, että käännät ja lähetät oikean targetin laitteelle.
A: Tarkista, että käännät ja lähetät oikean targetin laitteelle.
Q: Mistä tiedän, mitä targetia minun pitää käyttää?
A: Jos käytät juurikansion
A: Jos käytät juurikansion
src/main.c-tiedostoa, targetin nimi on määritelty juuren CMakeLists.txt-tiedostossa (muuttuja MAIN_TARGET). Jos käytät esimerkkejä, avaa esimerkkikansion CMakeLists.txt ja tarkista muuttuja DEFAULT_TARGET.Q: Annatteko jonkinlaisen pohjan (template) loppuprojektille?
A: Kyllä. Se on sama projekti kuin harjoituksissa, ja voit ladata sen github-sivulta. Voit nimetä
A: Kyllä. Se on sama projekti kuin harjoituksissa, ja voit ladata sen github-sivulta. Voit nimetä
template.c → main.c. Jos et tee muita muutoksia CMakeLists.txt-tiedostoon, targetin nimi on hat_app.Sensorit¶
Q: En tiedä mistä aloittaa sensorien käyttämisen!
A: A: Anturien käyttö on kuvattu luentomateriaalissa. Lisäksi oheislaitteet-osio sisältää kaiken tarvittavan tiedon anturien käyttöön, mukaan lukien SDK:n funktiot. Tarjoamme myös esimerkkejä projektin GitHubissa. Katso esimerkiksi, miten käytetään IMU-anturia tai näyttöä.
Tutustu myös TKJHAT-SDK:hon saadaksesi lisätietoa siitä, mitä funktioita kutakin anturia varten käytetään.
Lopuksi, koko SDK:n koodi löytyy GitHubista. Voit aina tarkastella sitä sieltä.
Q: Yritän lisätä ohjelmaani sensoreita, mutta kääntäjä ei löydä niiden kirjastofunktioita..
A: Antureita ja muita oheislaitteita varten sinun täytyy sisällyttää TKJHAT SDK -kirjasto (sisältyy kurssin GitHub-projektiin). Tee näin:
- Kohteesi
CMakeLists.txtlinkittääTKJHAT_SDK-kirjaston
{{{
target_link_libraries(${MAIN_TARGET}
pico_stdlib
FreeRTOS-Kernel
FreeRTOS-Kernel-Heap4
TKJHAT_SDK)
}}}
target_link_libraries(${MAIN_TARGET}
pico_stdlib
FreeRTOS-Kernel
FreeRTOS-Kernel-Heap4
TKJHAT_SDK)
}}}
- C-tiedosto sisällyttää kirjaston
#include "tkjhat/sdk.h"
Q: Sensorin alustus (
init_x-funktiossa) epäonnistuu!A: Syy voi olla monessa, mutta useimmiten kyse on siitä, että yrität alustaa useita antureita samanaikaisesti (eri FreeRTOS-tehtävissä). Voit alustaa anturit pääohjelmassa (
main) yksi kerrallaan tai käyttämällä eri tiloja (states) kunkin anturin alustamiseen.Tulevaisuudessa tämä ratkaistaan SDK:ssa.
Muista myös alustaa TKJHAT
init_had_sdk; tämä alustaa I2C-väylän, joten sitä ei pidä alustaa uudelleen, eli ÄLÄ KÄYTÄ SEURAAVAA KOODIA: i2c_init(i2c_default, 400*1000);
gpio_set_function(PICO_DEFAULT_I2C_SCL_PIN, GPIO_FUNC_I2C);
gpio_set_function(PICO_DEFAULT_I2C_SDA_PIN, GPIO_FUNC_I2C);
gpio_pull_up(PICO_DEFAULT_I2C_SCL_PIN);
gpio_pull_up(PICO_DEFAULT_I2C_SDA_PIN);
Q: Kuinka voin havainnollistaa sensoridataa?
A: Session 1:ssä kerroimme, miten Arduino Serial Plotteria käytetään datan esittämiseen.
Luentomateriaalin projektikappale antaa vinkkejä anturidatan visualisointiin tulostamalla dataa terminaaliin
printf:n avulla. Voit käyttää ohjelmia kuten M$ Excel, gnuplot, Python-kirjastot, Matlab, jne.On suositeltavaa kerätä anturidata csv-muodossa, jonka useimmat ohjelmat voivat lukea suoraan.
Grafiikka ja ääni¶
Q: Miten laitteesta saa ääntä?
A:' TKJHAT:ssa on yksinkertainen summerikomponentti, joka tuottaa piippausääniä. Sitä ohjataan SDK:n funktioilla:
init_buzzer, buzzer_play_tone ja buzzer_turn_off. Esimerkkikooditiedosto löytyy GitHub-projektin esimerkistä.Summeri on kytketty I/O-pinnejä käyttäen, ei I2C-väylään.
Verkosta löytyy runsaasti esimerkkejä, miten sulautetulla järjestelmällä voidaan soittaa kappaleita "ghettoblasterina".
Q: Miten voin piirtää kuvia LCD-näytölle?
A: Kuva esitetään bittikarttamuodossa ykkösten ja nollien avulla, missä ykkönen tarkoittaa, että vastaava pikseli on päällä. SDK:mme toimii kääreenä Pico SSD1306 -kirjastolle, joten voit käyttää suoraan sen funktiota
ssd1306_bmp_show_image. Lisää ohjeita löytyy virallisesta kirjastodokumentaatiosta. Kuvasi tulee ensin muuntaa sopivaan muotoon (bmp) ja sen jälkeen muuntaa heksadesimaalimuotoon .h-tiedostossa esimerkiksi bin2c-tyyppisellä sovelluksella.Voit myös piirtää kuvat käsin, pikseli kerrallaan, esimerkiksi Paintilla, ja sitten muuntaa kuvan heksadesimaaleiksi laskemalla ne itse suurin piirtein tai käyttämällä olemassa olevia työkaluja. Verkosta löytyy myös bittikarttakuvien muokkausohjelmia.
Tilakone¶
Q: Miten voi seurata tilakoneen toimintaa useassa eri taskissa?
A: Debug-tulostuksilla.. eli tilakoneen tilamuutoksista viesti konsoli-ikkunaan.
Kehitysympäristö ja konsoli¶
Q: Mikä debuggeri?
A: Debuggeri on (sulautetuissa järjestelmissä) yleensä erillinen fyysinen laite ja siihen liittyvä ohjelmisto, jolla voidaan ohjata mikrokontrollerin toimintaa ja ohjelman suoritusta siinä. Debuggeri on kätevä varsin kampe sulautetussa ohjelmistokehityksessä ja onkin mukana kaikissa moderneissa laitteissa ja niiden kehitysympäristöissä. SensorTagin debuggeri on se erillinen piirilevy näytön ja laitteen välissä, missä se virheä ledi on aina päällä.
Debuggerin käyttö perustuu breakpointtien asetteluun ohjelmakoodiin. Ohjelmassa voi olla useita eri breakpointteja yhtaikaa. Breakpointilla merkitään (ympyrä tms merkki koodirivin kohdalla editorissa) ohjelmakoodista paikkoja, joihin ohjelman suorituksen halutaan pysähtyvän livenä. Kun ohjelman suoritus pysähtyy, debuggerilla on pääsy laitteen tilaan, muistiin, (joskus jopa oheislaiteisiin,) ym.
Debuggeri-ohjelman paneelissa on erilaisia toimintoja ohjelman suorittamiseen, kuten rivi kerrallaan (esim. step over) tai ohjelman suoritus seuraavaan breakpointtiin asti (run).
Emme käytä tällä hetkellä debuggeria. Käytä sen sijaan debug-tulosteita tai LEDiä.
2025 Projekti¶
Q: Onko painikkeiden käyttö pakollista missään tasossa?
A: Ei ole, vaikka uskomme, että niiden käyttö voi helpottaa sovelluksesi työnkulkua.
A: Ei ole, vaikka uskomme, että niiden käyttö voi helpottaa sovelluksesi työnkulkua.
Q: Video-ohjeissa sanotaan, että meidän pitäisi keskustella käyttämistämme keskeytyksistä. Entä jos emme ole käyttäneet keskeytyksiä? Onko se OK?
A: Keskeytyksiä ei ole pakko käyttää. Mieti kuitenkin, käyttääkö jokin koodisi osa laitteisto- tai ohjelmistokeskeytystä (myös SDK voi käyttää niitä). Jos keskeytyksiä ei käytetä, mainitse videolla selkeästi, että et käytä niitä.
A: Keskeytyksiä ei ole pakko käyttää. Mieti kuitenkin, käyttääkö jokin koodisi osa laitteisto- tai ohjelmistokeskeytystä (myös SDK voi käyttää niitä). Jos keskeytyksiä ei käytetä, mainitse videolla selkeästi, että et käytä niitä.
Lopuksi¶
Kysyvähän ei tieltä eksy.
Tällä kurssilla todellakin annetaan vain kalpea aavistus C-kielestä ja sen käytöstä. Ihan vaan sen verran, että opimme käyttämään sitä työkaluna sulautettujen järjestelmien ohjelmoinnissa.
Anna palautetta
Kommentteja materiaalista?