Kysymys:
Kuinka mikrokontrolleri lataa ja suorittaa käynnistyslataimen?
Tu Do
2015-01-11 02:57:03 UTC
view on stackexchange narkive permalink

Tiedän, että tavalliselle tietokoneelle BIOS suorittaa keskeytyksen 0x19 -käsittelijän etsimään käynnistettävää laitetta ja jos laite löytyy, ensimmäiset 512 tavua ladataan 0x7c00: ssa ja BIOS alkaa suorittaa että osoite. 0x19 ja 0x7c00 , vaikka ne ovat vakiona, BIOS-valmistus määrittelee.

Koska mikro-ohjain ei käynnistä käynnistykseen ulkoista laitetta, kuten kiintolevyä, mutta käyttää sen flash-muistia, mistä tiedän, mihin se aikoo ladata ja suorittaa käynnistyslatauskoodin flash-muistissa? Ja mikä keskeytys? Onko sinulla dokumenttia, ts. Minulla on TM4C123-mikrokontrolleri, mitä asiaankuuluvia asiakirjoja minun on tarkasteltava käynnistyslataimen kirjoittamiseksi?

Minulla on SO-vastaus Arduino-käynnistyslataimesta: http://stackoverflow.com/a/3655529/194586
Neljä vastused:
Majenko
2015-01-11 03:03:02 UTC
view on stackexchange narkive permalink

Mikrokontrolleri, kuten mikä tahansa muu keskusyksikkö, alkaa suorittaa koodia kiinteästä osoitteesta. Kyseistä osoitetta kutsutaan usein "palautusvektoriksi".

Osoite on mikro-ohjaimen taulukkossa.

Jopa tietokoneessa se toimii näin. Kiintolevyn "käynnistäminen" on noin numero 10347 sen käynnistyslistan luettelossa - ensimmäinen on suorittaa koodi ROM-levyltä, aivan kuten mikro-ohjain Flashista.

Sulautetussa maailmassa, erityisesti sulautettujen käynnistyslatainten kanssa, mikroset * eivät * aloita koodin suorittamista kiinteästä osoitteesta.Pikemminkin se on usein säädettävissä (erilaisten mekanismien avulla), jotta voidaan tukea laitteessa samanaikaisesti olevia kahta ohjelmaa (käyttäjäkoodi ja käynnistyslatain).
Kun ohjelmointi on suoritettu, palautusvektori EI KOSKAAN muutu.Koskaan.Kyllä, voi olla tapoja muuttaa sitä ohjelmoinnin aikana, mutta se on täysin merkityksetöntä.Kun siru on ohjelmoitu, se on kiinteä, kunnes ohjelmoit sirun uudelleen.Se kaikki kuuluu vastaukseni toiseen kappaleeseen, joka voidaan tiivistää seuraavasti: * Lue esite *!
@Majenko: saatat olla hieman väärässä siitä, että palautusvektori ei koskaan muutu.On olemassa mikrokontrollereita, joissa voit muuttaa palautusvektoria sovelluksesta (esimerkiksi jotkut Atmel-sirut).Ohjelmoinnin aikana voidaan asettaa sulake, joka päättää, miten nollausvektori alustetaan, mutta voit muuttaa sen myöhemmin ohjelman suorittamisen aikana, jotta kaikki nollauslähteet paitsi kylmäkäynnistys käyttävät uutta palautusvektoria.
@vsz Luulen, että voimme harhautua hieman asiasta ja kiistellä semantiikan suhteen täällä.Joten mitä jos on mekanismi, jolla voidaan muuttaa palautusvektorin sijaintia?Tämä ei muuta sitä tosiasiaa, että suoritus alkaa muistipaikasta, ei käynnistämällä ohjelmistokatkaisua, joka sitten lataa käynnistyslataimen muistiin.Kieltäydyn vetämästä tällaista pedanttista paskaa, joka käy jatkuvasti ympäriinsä, jossa keskityt yhteen tiettyyn sanaan, jonka sitten otat pois kontekstista ja väität.Se on täysin turhaa eikä sillä ole mitään merkitystä kysymyksessä.
@Majenko Tarkoitin vain kommenttisi, jossa totesit, että "Kun ohjelmoitu, palautusvektori EI KOSKAAN muutu. Koskaan."mikä on väärin ja voi aiheuttaa sekaannusta.Vastauksellasi olen täysin OK.Ei tarvita niin aggressiivista ääntä, varsinkin kun emme luultavasti koskaan kommunikoineet aiemmin, joten en tiedä miksi syytät minua "jatkuvasta" riidasta.
Ei vain sinä - koko yhteisö täällä.Se on täynnä pelkkää pedanttisuutta.
No, se on tekninen sivusto, ei filosofinen, joten mitä voit odottaa?:)
Dave Tweed
2015-01-11 03:25:09 UTC
view on stackexchange narkive permalink

Käynnistyslataimen termissä voi olla jonkin verran sekaannusta, jota käytetään hyvin eri tavalla sulautettujen järjestelmien ja työpöydän järjestelmien yhteydessä.

Ensinnäkin mikä tahansa suorittimen suorittama koodi Palautuksen jälkeen on jo oltava muistissa tietyllä kiinteällä osoitteella, jonka määrittelee käytettävä prosessori. Upotetussa järjestelmässä tämä koodi on todellinen sovelluskoodi, joka on sijoitettu sinne aiemmin ohjelmoimalla haihtumaton muisti, mahdollisesti käynnistyslataimen avulla (tunne 1).

Työpöytäjärjestelmässä käyttöjärjestelmä ja kaikki sovellukset koodi ladataan tyypillisesti jostakin toissijaisesta muistista (ts. tallennusvälineestä, josta prosessori ei voi suoraan suorittaa koodia) haihtuvaan RAM-muistiin. Tämän tyyppisessä järjestelmässä palautuksen jälkeen suoritettava koodi on BIOS-koodi, joka sijaitsee jonkin tyyppisessä ROM-levyssä emolevyllä. Yksi BIOS: n tehtävistä on käynnistys (merkitys 2) käyttöjärjestelmä. BIOS sisältää tarpeeksi koodia voidakseen käyttää erilaisia ​​toissijaisen tallennustilan muotoja, löytää käyttöjärjestelmän ytimen sisältävän tiedoston, kopioida sen RAM-muistiin ja siirtyä sitten siihen. Mitä sen jälkeen tapahtuu, riippuu ytimestä. Tämä koko prosessi tapahtuu joka kerta, kun järjestelmään kytketään virta tai se palauttaa laitteiston.

Palataksemme käynnistyslataimen tunnelmaan 1, tämä on koodi, joka on osa sitä, joka on jo ladattu sulautetun prosessorin haihtumattomaan tallennustilaan. ja se on erityisesti suunniteltu hyväksymään uusi sovelluskoodi ulkoisesta lähteestä ja kopioimaan se prosessorin haihtumattomaan muistiin. Tämän prosessin on tapahduttava vain, kun sovelluskoodia halutaan muuttaa jostain syystä. Muuten sama sovelluskoodi suoritetaan joka kerta, kun prosessori käynnistetään tai palautetaan.

Nick T
2015-01-11 03:24:08 UTC
view on stackexchange narkive permalink

Sulautettujen järjestelmien käynnistyslataimet voivat erota hieman yleiskäyttöisistä tietokoneista, koska voit määrittää prosessorin (koodimuistin lisäksi, usein "sulakkeet") aloittamaan suorituksen eri muistiosoitteesta . Tämä sallii koodin (käynnistyslataimen) injektoinnin, joka voi tarkkailla erityistä signaalia tekemään jotain erilaista (tyypillisesti laitteen uudelleenohjelmoimiseksi). Jos signaalia ei näy, käynnistyslataimet ohjaavat yleensä perinteiseen käynnistysosoitteeseen ja asiat jatkuvat normaalisti.

Säädettävä käynnistyssijainti sallii yhden, kiinteän binaarin, joka toimii käynnistyslataimen kanssa ja ilman sitä, niin kauan kuin pääohjelma käännetään, se ei ole päällekkäinen käynnistyslataimen muistin kanssa. Joten laitetta ohjelmoitaessa on kaksi karkeaa vaihtoehtoa:

  1. Ohjelmoi laite vain pääohjelmalla ja jätä käynnistyslataimen sulake yksin. Palautettaessa prosessori aloittaa pääohjelman suorittamisen normaalissa paikassa.
  2. Ohjelmoi laite (muokkaamattomalla) pääohjelmalla ja käynnistyslataimella ja aseta käynnistyslataimen sulake tarvittaessa. Palautettaessa prosessori käynnistää käynnistyslataimen, joka voi tehdä jotain (esim. Uudelleenohjelmointi) tai ei mitään (siirtää ohjauksen normaaliin sijaintiin).

Jos prosessorilla ei ole käynnistyslataimen sulaketta ja haluat käynnistyslataimen, se on hieman monimutkaisempi, mutta silti mahdollista (esim. ATtiny-käynnistyslataimet).

Upotetut järjestelmät eivät missään tapauksessa tarvitse käynnistyslatainta kuten tietokoneita. Kun prosessori käynnistyy tai muuten palautuu, käynnistyy nollauskeskeytys, jonka (pitäisi) palauttaa muisti ja oheislaitteet datalehdessä määritettyyn tilaan. AVR: ssä ohjelmalaskuri on asetettu vain nollaksi, joten prosessori tarttuu kaikkeen siellä olevaan ja menee. Jos käytät keskeytyksiä, tyypillisesti ensimmäinen joukko muistiosoitteita ovat kaikki JMP xxxx , joka toimii vektoritaulukkona, mutta jos et ole keskeytyksettä, ohjelmalogiikka voi alkaa vasta sitten ja siellä.

Kiitos tiedosta.Jos ymmärsin oikein, se tarkoittaa, että pääohjelmani on oletusarvoisesti "bootloader", ellei poltan varsinaista käynnistyslatainta tekemään jotain muuta ennen kuin hyppään pääohjelmaan, onko se oikein?
PkP
2015-01-11 05:27:56 UTC
view on stackexchange narkive permalink

Se on TI: n Cortex M4 ARM-mikrokontrolleri. Sen käynnistyslatain on ROM-levyllä. Katso tietolomakkeen luvut 1.3.2.3 ja 5.2.2.1: http://www.keil.com/dd/docs/datashts/ti/tm4c123/tm4c123gh6pm.pdf

Voit ladata ROM-käynnistyslataimen avulla sovellusohjelmiston tai poistaa ROM-käynnistyslataimen käytöstä kirjoittamalla BOOTCFG-rekisteriin. Jos ohitat ROM-käynnistyslataimen, voit määrittää palautusvektorin ja alkuperäisen pinon osoittimen arvon salamassa. Voit sitten laittaa minkä tahansa koodin flashiin, mikrokontrolleri suorittaa sen, kun se käynnistetään.

TivaWare ROM Bootloader ja TivaWare perifeerinen ohjainkirjasto ROM voivat helpottaa C-ohjelmien kirjoittamista tälle tietty mikrokontrolleri. Näyttää siltä, ​​että myös joitain aloitusdemoja on saatavana, katso: http://energia.nu/wordpress/wp-content/uploads/2014/07/Startup_Weekend_Bay_2014_TM4C123_Energia.pdf



Tämä Q & A käännettiin automaattisesti englanniksi.Alkuperäinen sisältö on saatavilla stackexchange-palvelussa, jota kiitämme cc by-sa 3.0-lisenssistä, jolla sitä jaetaan.
Loading...