Jump to content

Rakstīt kodu priekš STM32 izmantojot VS Code


AndrisBB
 Share

Recommended Posts

Forši @AndrisBB!

Sestdien pamēģināju sākt darboties ar stm32F103C86T ķīniešu klonu. Iestrēgu (laiks izbeidzās) pie projekta veidošanas cūūbēē. Viss baigi smuki, bet ļoti daudz apgūstamās vielas. Gan jau pēc tam viss aiziet. Pēc tam būs jāizvēlas ide. Ir tam pašam ST - cubeide. Bet tur laikam ir tikai c. Lielākā daļa bibleņu visādiem sensoriem uzrakstītas c++. Būs jāpamēģina Tavs video realizēt dzīvē. Apskatīju mbed studio... kaut kā nepatika, nebija tas "klikšķis". Piemēram ar atmelstudio bija ?.

 

Bet šādas ides nekad neapies, pat nepietuvosies popularitātē plašās masās arduino. Ņemot vērā vēl to, ka šo stm arī var  dabūt iekš arduino.

 

edit:

ņem kuru bibleni gribi (varbūt nedzudz pārspīlēju, bet uz to iet) ...

#ifdef ARDUINO ....blablabla... #ifdef MBED... blablabla ... un viss

 

edit:

pamēģināju vienu vakaru piešķilt UIPEthernet bez arduino uz plika avr. Pietrūkst zināšanu... nomuhļījos...

 

Labots - Jurkins
Link to comment
Share on other sites

Velak uztaisisu video ka pieslegt OpenOCD utt. Ka ari saku stradat pie projekta kur izmantoju STM32, varbut vares pielikt kadu reali piemeru, mazliet vairak par Hello World.

 

pirms 3 stundām , Jurkins teica:

Pēc tam būs jāizvēlas ide. Ir tam pašam ST - cubeide

ST ir pasiem sava Eclipse versija - ST Workbench https://www.st.com/en/development-tools/sw4stm32.html

  • Patīk 1
Link to comment
Share on other sites

Pirms 4 minūtēm , AndrisBB teica:

sava Eclipse versija

Šo biju palaidis garām. Paldies. Jāievērtē, jo izvēle būs jāizdara?.

Link to comment
Share on other sites

Es gan to Eclipsi reti izmantoju, un ja izmantoju, tad kodu rakstu ieksh VS Code un tad Eclips'e tikai debuggoju vai flshoju. Bet tas ir reti, kad vajag izlabot kadu sikumu un slinkums salikt iestaijumus prieks Code.

Link to comment
Share on other sites

Tagad pa laikam ko spēlējos ar arduino kodu rakstot arduino idē.  

 

vēlētos pārvākties uz stm32, kas laikam būtu price/performance daudz pareizāk

 

Jautājums: vai šāda plate ir sevis mānīšana jo tik un tā displeju un sensoru bibliotēkas nestrādās pamatā?

 

vai uzreiz cīnīties ar STM32 F103C8T6 kā @Jurkins pieminēto?

Link to comment
Share on other sites

Tam bibliotekam vajadzetu stradat, bet nekad nevar zinat.

 

Problema ar visam tam F103C8T6 Blue vai Black ir ka tev vajadzes piepirkt debuggeri tikunta, jo rakstit un testet kodu pa "aklo" uz mikrokontroliera, ka to parasti dara Arduino cilveki ir pamatiga sape pakala.

Ka turpinajumu esoshajam video, pieliksu piemera ka dabut, lai darbojas tas F103C8T6 + debuggers.

Labots - AndrisBB
  • Patīk 1
Link to comment
Share on other sites

Bet šitā plate jau ir tā, ko pieminēju. Atšķirībā no ķīnas kloniem, šai jau ir arduino būtloaderis iekšā. Visas arduino bibliotēkas gan jau pa lielam strādās. Ar to bibleņu nestrādāšanu es domāju IDEs sakarā, jo pa lielam visas arduino biblenes ir uz c++ rakstītas, bet manis minētā piemēram, šķiet, tikai ar c draudzējas.

 
Es šitādu pasūtīju. Cena nekāda, var displeju normāli piejūgt u.t.t. Redzēs, kā man veiksies ar stm.

 

Pirms 5 minūtēm , AndrisBB teica:

piepirkt debuggeri tikunta

Vai ar debugeri domā ST-Link V2?

Labots - Jurkins
Link to comment
Share on other sites

Jaa. Es gan vinju nepirktu atseviski.

Es parasti nolauzu nost debuggeri no Nucleo boarda, jo to man ir chupam gan majas, gan darba.

Ja baigi vajag, tad officiali var parflashot uz Segger J-linku. Protams, tad nav vairs visas krutas J-Link fiichas, var teikt sanak J-Link Light :)

 

maxresdefault (1).jpg

Link to comment
Share on other sites

Man jau krietni sen tumbočkā mētājās tie F103... un šitas STlink, tikai nesanāca pieķerties klāt. Katrā gadījumā tas stlinks čipu atpazina un nolasīt varēja, līdz rakstīšanai vēl netiku. Toreiz, pirms iemešanas tumbočkā, biju pieslēdzis vienu ar uartu un iešuvis arduino būtloaderi un iešuvis standarta led midžināšanu. Tagad konkrētā platīte neatpazīstas ar stlinku. HVZ, ko esmu tur sastrādājis.

edit: vakar bišķi tīri intereses pēc paņēmos ar arduino+stmklons. Tipa ar to, kuru st-links neatrada. Pieslēdzos ar usb2serial. Izrādās ejošs. Un izrādās, viss ir baigi elementāri, ja izvēlas šādu ceļu. Tā kā ja @Usins dara to? paretam, tad var sākt tajā pašā arduino vidē un pamazām ietrīties uz kaut ko advansētāku.

Labots - Jurkins
Link to comment
Share on other sites

Tīri intereses pēc padalāties ar pielietojumu STM'iem, ESP8266, ESP32 utt.. 

Ir kāds reāls pielietojums/izdevīgums? Salīdzinājumam - tas ko esmu redzējis, parasti ir mēģinājumi izveidot to kas jau ir (kontrolieri, moduļi, izpildmehānismi). Principā gatavi risinājumi bez kādas vajadzības (laika izdiršanas :sorry) kaut ko lipināt, kodēt utt.. Nu vismaz industriālā līmenī.

Link to comment
Share on other sites

Isti nav skaidrs kads ir jautajums, bet stm32 ir vieni no popularakajiem mikrokontrolieriem. Vini ir visur, atver kautkadu industrialu/majas iekartu un ja tur ir microkontrolieris, tad liela varbutiba ka tur bus kads no STM32 variantiem. Familija ir diezgan liela, sakot no ARM Cortex M0 (mazi, ekonomiski paretinja, leti), lidz pat M7, kas iet virs 200MHz.

 

ESP jau vairak tads "uzhakots" chips. Nekados nopietnos aparatos neatradisi. Ja nu vienigi lieliem razhotajiem, kam ir ligums ar chipmeikeru un pieeja dokumentacijai. Kautkur jau vinjus pirmsakumos izmantoja.

Link to comment
Share on other sites

pirms 3 stundām , Amazons teica:

reāls pielietojums

piemēram, kad gatavais industriālais risinājums pakaras, attālināti to restartēt un tam iebarot pāris komandas (te gan pietiku ar atmelu)

 

aizvien vairāk gatavu lietu komunicē caur ražotāja serveri, tas vai nu maksā, vai ir (subjektīvi) nedroši ilgtermiņā paļaujoties uz šādiem risinājumiem. 

 

@Jurkins mēģināšu gan/gan paralēli. Jācenšas apgūt pēc iespējas modernāki un pareizāki risinājumi uzreiz, savādāk dzīvē beigsies kamēr mēģināšu iziet visu mikrokontrolieru u.c. evolūciju. No otras puses, pašmācības/hobija ceļā, pārāk stāva mācīšanas līkne noved pie projekta pamešanas nesasniedzot nekādu rezultātu. Taustos. 

Labots - Usins
  • Patīk 1
  • Atbalstu 2
Link to comment
Share on other sites

pirms 6 stundām , AndrisBB teica:

Vini ir visur, atver kautkadu industrialu/majas iekartu un ja tur ir microkontrolieris

Jā to es zinu! Tagad pat lodāmurus kurbulē uz stm32. Es vairāk par to kam/ko jūs kaut ko būvējat? Jo diez vai tas ir vecs ZIL ledusskapis kuru gribat upgreidot līdz Elektrolux "side by side" ledusskapja līmenim mājas vajadzībām :D

Link to comment
Share on other sites

pirms 4 stundām , Usins teica:

kad gatavais industriālais risinājums pakaras

 

pirms 4 stundām , Usins teica:

aizvien vairāk gatavu lietu komunicē caur ražotāja serveri, tas vai nu maksā

 

Tas fakts, bet, ja pakaras tavs darinājums, tad lai nodrošinātos jātaisa vēl vienu kurš restartē tavējo? Es tik filozofēju ;)

 

  • Haha 1
Link to comment
Share on other sites

Es pārsvarā izmantoju darbā visādām iekārtām, sākot no vienkāršiem scenārijiem, kur jānomaina jāieslēdz LED lai par kautko informētu useri, lidz jau daudzmaz nopietnai signālu apstrādei.

 

Priekš sevis tagad ir 2 aktīvi projekti.

* Lego motoru/sensoru draivers, lai bračkas sīkie var programmēt robotus.  

* Robota galva, kas grozās, kunstina muti utt. Iespējams vēlāk iepostēšu te par šo temu, kad jau daudzman kautko būšu izdarijis. Pagaidām īsti nav laika.

Link to comment
Share on other sites

pirms 4 stundām , Usins teica:

piemēram, kad gatavais industriālais risinājums pakaras, attālināti to restartēt

Vai aizstāt to gatavo industriālo risinājumu, kad ir apzināti visi tā trūkumi ar savējo. Uzreiz iegūstam virkni priekšrocību:

- ir pilna informācija par šo ierīci

- visaugstākais softiskais piekļuves līmenis ierīcei, kāds vien var būt, nevajag lūgties zemoties un draudēt un maksāt lielu naudu, lai dabūtu donglu ar nožēlojamām iespējām.

- ja kaut kas darāms tajā ierīcē ar lodāmuru, pat stipri cenšoties nav iespējams nosvilināt kaut ko vairāk kā pāris eiro vērtībā. Ko nevarētu teikt par gatavajām industriālajām ierīcēm.

Pirms 28 minūtēm , Amazons teica:

Tas fakts, bet, ja pakaras tavs darinājums, tad lai nodrošinātos jātaisa vēl vienu kurš restartē tavējo?

Ļoti vienkārši - jātaisa darinājumi, kas nekaras

  • Patīk 2
Link to comment
Share on other sites

Uztaisiju nākamo mikro video - Kā "pāršūt" firmwāri vainu izmantojot Mass Storage Device vai arī STM32 Cube Programmer.

 

* Linuxa gadījumā parbaudam ka ir izveidots udev .rules fails, lai piespraužot devboardu, tas tiek automātiski piemontēts kā flashka.

* Izveidojam elementāru Blinku kodu. LD2 ports (PORT_A) un pins (PIN_5) tika izveidots iekš Cube MX, vienkārši pieliekot labelu LD pie pina.

* Vienkāršākais variants kā pārkopēt firmwāri ir copy/paste uz flashu ko ST-Link emulē.

* Ja gribas ko vairāk, tad var izmantot STM32 Cube Programmer. Kad pērk tos ķīniešu lētos F103C8T6 bāzētos boardus aka BluePill/BlackPill, tad parasti viņi ir write protected, tad bez programmera neiztikt, lai atslēgu rakstīšanas aizsardzību.

 

 

  • Patīk 2
Link to comment
Share on other sites

Pirms 10 minūtēm , M_J teica:

maksāt lielu naudu, lai dabūtu donglu

 nu nez, PLC projektiem var lietot Tosibox (premium klase). Viens dongls uz n-tiem aparātiem (draugu cena ap 250Eur). Zinu cilvēkus kuriem ir 10-iem (baidos teikt 100-iem) objektu pa visu pasauli un normāli dzīvo ar vienu donglu kabatā. Man ir tikai daži objekti :)) Sasaiste ar ražotāja serveriem?! Tāpēc ka tā ir vienkāršāk realizēt pieslēgšanos da kaut vai āfrikā, kur hvz cik rūteriem un banānmizu ugunsmūriem tev jātiek cauri.

Protams saprotu ka situācijas ir dažādas

Link to comment
Share on other sites

Pirms 3 minūtēm , M_J teica:

aizstāt to gatavo industriālo risinājumu

Arī variants, bet man tādi ir 200 gabali un ja neņem vērā, ka pa laikam (3 mēnēši - 5 gadi) pakaras  - funkciju pilda. 

 

Savu pagaidām nav pieticis neatlaidības pabeigt. 

Kopumā varu parakstīties zem  @M_J aprakstitā.

 

Vaina varbūt ir pārdošanas prasmēs, izvēlētā produktā/ražotājā, trūcīgā mazā tirgū. Savā ziņā nabadzība veicina tehnisku radošumu. 

 

Bernībā rotaļājos ar lodumuru, vēl zx spectrum bet sākās pusaudža trakumi un tas  viss pazuda. Pēc 20 gadiem birojā ar  caurspīdīgo līmlenti pietinu 3xAAA baterijām štekeri  iekārtas barošanai (D izmēra 3.6V Saft LV maksā kosmosu). Skatijos uz to līmlenti skumji un nolēmu izvilkt lodāmuru. Tad nejauši tika atklāts ka %10 sprieguma pieaugums ievērojami uzlabo uztveršanu, tad jau sākās. 

 

Ap to pašu gadu pēc vairāku nedēļu lūgšanās IT uzturetājām rietumvalstī ka nedarbojas datu imports noteikta veida failiem lai nodrošinātu klientu apkalpošanu pāris dienās uzcepu izmantojumu savu risinājumu. Tas bija otrs lūzuma punkts,  kad sapratu - ka varu pats ātrāk, labāk, sev drošāk. 

 

Mani skripti datorā ir diezgan nestabili, regulari karās, bet parasti viegli pašam pielabojumi. 

 

Arduino pagaidām viss ir darbojies gludi (kas vispār sanācis)

Link to comment
Share on other sites

Pirms 24 minūtēm , Amazons teica:

Protams saprotu ka situācijas ir dažādas

Manā gadījumā (lietās, kas saistītas ar elektrostacijām) ar dongliem ir problēmas. Ir tāds ražotājs Heinzmann, kas taisa visādus ķiņķeriņus šādām vajadzībām. Gandrīz visām gāzes elektrostacijām ir Heinzmann apgriezienu regulatori. Ja tādam regulatoram ir nekorekti uzstādīti PID parametri, viņš "iešūpo" to motoru un sasinhronizēties un pieslēgties tīklam ir tīrās mocības. Tas Heinzmanns, pēc ilgas sarakstes, bija gatavs man tādu donglu pārdot par nieka 2000 eiro, un ne jau "inženiera" versiju. Vispār, paldies šim kantorim. Rezultātā man tagad ir savs apgriezienu regulators, kas darbojas jau vairākās elektrostacijās. Pēdējā gada laikā ir nācies piedalīties problēmu risināšanā virknē elektrostaciju, kur strādā DEUTZ/MWM motori ar TEM-EVO vadību. Tajā vadībā ir virkne vājo vietu, kas turklāt maksā neadekvāti dārgi. Piemēram, "tačskrīns". Būtībā vadības panelis. Ekrāns kopā ar datoru. Būtībā tāds "Raspbery PI" tikai ar lielāku ekrānu. Tikai atšķirībā no "avenes" tas sūds maksā četrpadsmit tūkstošus. Viņam iekšā ir sava programma no sērijas: "Anglija bij aizslēgta, atslēga bij nolauzta". Bet tas ekrāns pats neko nevada. Motoru vada atsevišķa kaste, un ekrāns ar to sazinās, izmantojot kaut kādu idiotisku savu, nekur neaprakstītu, protokolu, mazliet līdzīgu 3964R (laikam stulbāku protokolu, ko izmantot par paraugu nebija varējuši sameklēt). Vasarā bija iespēja ilgāku laiku ar tādu verķi padarboties un izpētīt to protokolu, un vispār visu datu apmaiņu starp ekrānu un vadības kasti.  Tagad gribu to ekrānu vienkārši aizstāt ar "aveni" + kaut kādu datora monitoru. Potenciālie klienti jau ir. Vairākos objektos, kur esmu risinājis citas problēmas, tas TEM ekrāns ir pussprādzis.

  • Patīk 2
Link to comment
Share on other sites

Gribēju šodien uztaisīt mikro video kā dabūt OpenOCD un debuggot STM32 iekš VS Code, bet nesanāca laiks. Jātliek uz nākamo nedēļu.

 

Tikmēr varu padalīties ar projectu pie kura šodien sāku strādāt. Būtībā ideja vienkārša:

  • STM32 F429ZI mikrokontrolieris (vai ja vajadzēs vēlāk, tad upgreidošu uz ko jaudīgāku)
  • OS: FreeRTOS
  • TCP/IP - LWIP staks.
  • Uz mikkrokntroliera būs HTTP servers, lai var kontrolēt servo motorus un nolasīt dažus sensorus
  • Būs video strīms no kameras OV7670 - vai kaitkas tml. Video būs jāpārkodē uz Motion JPEG.
  • Būs jābūt iespējai nosautīt audio, kura atskaņot.
  • Protams kautkāda web lapa, la var debuggot sistēmu un visu kontrolēt
  • Tākā tmiņas nav daudz, tad ganjau vajadzēs SD karti vai kādu citu ārējo atmiņu.

 

Šodien sāku strādāt pie web servera daļas. Ideja tāda ka viens Tasks (pavediens?), apstrādā ienākošos vaicājumus un padod tālāk iekš FIFO Queue. Tad 1 vai vairāki citi pavedieni gaida uz to FIFO un apstrādā pašu requestu, aizsūta atbildi. Cik pavedieni, pagaidām nezinu, bet to var viegli modificēt uztaisot tik cik vajag.

Lai parsētu pašus HTTP headerus atradu tādu bibliotēku iekš github https://github.com/h2o/picohttpparser

Tālāk vajadzēs kautkā mappot pašu requestu ar attiecīgo funkciju. Te domāju izmantot regex un funkciju pointeru tabulu. Atradu arī kautkādu mikro bibliotēku kas atbalsta primitīvus regexus, jāpaskātās būs kā strādā. https://github.com/kokke/tiny-regex-c

 

Ja kādam interesē kods, tad uztaisiju arī repo https://github.com/AndrisBB/STM32_Robot_Controller

Pagaidām gan tur īpaši skatīties nav ko un kautkāda darbība notiek tikai šinī pavedienā https://github.com/AndrisBB/STM32_Robot_Controller/blob/master/Src/tasks/http_task.c

Primitīva diagramma un board foto zemāk:

 

 

Untitled Diagram.jpg

IMG_20200223_181506.jpg

  • Patīk 4
Link to comment
Share on other sites

Kontrolēta tiks robota galva.

Kopā apmēram 6 servo motori (grozīt, kustinat muti, plecus, acis), vienas acs vieta būs kamera, otra iespejams mini displays, kautkads mini skaļrunis utt.

Pagaidām viss tikai sākuma stadija, daudz ko 3d printēt un daudz koda ko rakstīt.

 

 

 

IMG_20200223_190758.jpg

  • Patīk 1
  • Haha 1
Link to comment
Share on other sites

Redzēs kas tur sanāks. Par pamatu tiek izmantoti elementi no InMoov robota.

Seja būs noteikti mazliet jāpamaina, no sākuma bij doma izmantot manis paša galvu, bet tad pārdomāju. Laikam acu/sejas elements būs mazliet jāpārtaisa, jāuztaisa kautkāds līdzīgs iluminators kā manā avatārā.

 

DSC_0025bis2-682x1024-e1574161689778.jpg

Labots - AndrisBB
Link to comment
Share on other sites

Jurkins

Jā, man stm32 vēl ir kosmoss. Vakar nomuģījos ar sistēmas taimeri. Beigās jau palaidu "blinku" balstoties nevis uz aizturēm, bet uz 1 ms tikšķiem, bet ... rakos, rakos pa tie HAL failiem... tā arī neatradu, kurā vietā tiek atļauti pārtraukumi no sistēmas taimera ?. Jā, un tas ST ide jau ir uz tās pašas eklipses bāzes laikam, tikai nevaru atrast (nav???) kā dabūt autocomplete. Nu bez tās fīčas ir baigi nogurdinoši. Jāmēģina būs likt lietā @AndrisBB manuālis un jāmēģina VS Code.

Link to comment
Share on other sites

AndrisBB

Uztaisiju divus jaunis video:

* Kā setupot OpenOCD un debuggot kodu uz devaisa

* Kas jādara, lai varētu izmantot printf un citas stdlib funkcijas

 

 

OpenOCD

 

Tāka te daudziem patīk izmantot to BluePill, tad uztaisiju apmēram 10 min video kā visu setupot un debuggot kodu iekš VS CXode. Soļi apmēram sekojoši.

  • Uztaisam CubeMx projektu priekš STM32F103C8T
  • Iespējojam Serial Wire debug interfeisu
  • Iestatam pulksteņus. Ja nav nepieciešama nekāda super laika precizitāte, tad var iztikt ar iebūvētajiem kristāliem, bet tākā uz Blue Pill jau ir 2 kristāli, tad var izmantot tos. Procesora frekvenci uzliekam uz 72Mhz. Var arī jebkuru citu frekvenci.
  • Iespējojam UART1 priekš debuggošanas 
  • Iespējojam PC13 pinu priekš LED. Tikai viens LED uz tā BluePill.

 

Tālāk ja viss darbojas, tad:

  • Lejupielādējam OpenOCD.
  • Kompilējam, instalējam
  • Uztaisam configu priekš BluePill, vienkārši nokopējot no Nucleo un samainot uz pareizo CPU.
  • Pārbaudam vai strādā no komandrindas - palaižam OpenOCD un pieslēdzam GDB.
  • Iekš VS Code instalējam Cortex Debug pluginu.
  • Uztaisam konfigu prieks debugošanas
  • Viss darbojas

 

 

 

Iespējojam printf

 

Pa lielam ja vajag kautko rakstīt uz serial portu, tad var rakstīt pa taisno, bet man labāk patīk caur printf. ARM GDB nāk ar pre-buiuldotu newlib C bibliotēku. Kad kompilē tad var norādīt, lai neizmanto viņu vispār. Bet ja tomēr vajag, tad pašam ir jāuzraksta zemākais slānis, lai printf, gettime, malloc utt darbotos. Pa lielam man jau tas fails ir sen uzrakstīts un tikai copy/paste inu jaunā projektā. Es viņu saucu par syscalls.c.

Lai printf drbotot vajag pašam uzrakstīt putchar funkciju, kas pa defaulto ir implementēta kā weak, tapēc neko nedara. Putchar funkcijā vienkāršu sūtam to char uz seriālo portu, bet var sūtīt kur vien grib.

 

 

 

 

 

 

 

 

 

Link to comment
Share on other sites

AndrisBB
(labots)
pirms 6 stundām , Jurkins teica:

Vakar nomuģījos ar sistēmas taimeri. Beigās jau palaidu "blinku" balstoties nevis uz aizturēm, bet uz 1 ms tikšķiem

 

HAL bibliotēka ir diezgan labi dokumentēta, paskaties header failos vai .c failos. Plus daudz piemēru iekš CubMX. Paskaties Examples mapē.

Jebkurā gadījumā uztaisiju mini video kā izmantot Basic Timeri visvienkāršākajā modē.

Soļi apmēram tādi:

  • Iekš CubeMx iespējo taimeri. Var jau protams pats to kodu uzrakstīt. Bet vieglāk no turienes.
  • Ja piemēram vēlies 20 ms tikšķi, tad izvēlies counting mode - up. Tākā MCU frekvence ir 72 Mhz, tad ieliec prescaileri 72 (video ir kļūda, īstenībā vajag 72 -1), lai timera pulkstens būtu 1mhz. Caunteri ieliec 20 000 - 1, tai interupts tiktu izsaukts kad caunters sasniedz to daudzumu. Tad sanāk interrupts katras 20 ms. Ja vajag citus intervālus, tad izvēlies pats ciparus.
  • Iespējojam interruptu
  • Main funkcijā sākam taimeri. (Vai tad kad vajag)
  • Interruptu handlers it xxx_it.c failā.
  • Uzrakstam callback funkciju priekš taimera (pa defaulto viņa ir implementēta kā weak)
  • Viss, taimers strādā.

 

Labots - AndrisBB
  • Patīk 1
Link to comment
Share on other sites

Jurkins
(labots)

Smuks video. Taimeri būs nākamais solis. Es biju nosprūdis uz sistēmas taimera ?.

Bet nu viss sanāca beigās labi. Izdevās palaist oriģinālo ST debageri. Izrādās ķīnieši ir baigie dibenzellii... nē, nevis dibenzeļļi, bet p'idari. Tiem lētajiem ST-Link V2 (~2 eiro) nav izvadīti ārā 2 signāli, no kuriem reāli gan vajag (pašlaik vismaz) vienu -reset. Vispār jau tāds reset pins šim eksistē, bet ko viņš resetē, tā arī nesapratu. Lai iešūtu ar CubeProgrammer nācās turēt nospiestu "bluepill"reset pogu, palaist "connect" un tad reset palaist vaļā. (Pagāja viens riktīgs vakars, kamēr sapratu, kas notiek). Beidzot atradu vienu gudrinieku, apbruņojos ar lupu, iespringu (sūtīga jau redze paliek, bet vēl kaut kas sanāk) un vuaļā.

Līdz ar to arī aizgāja ides dzimtais debageris. Nu un tagad jau soli pa solim smuki var paskatīties, kas notiek, kā šis palaižās u.t.t. Pagaidām vēl neesmu atradis, vai eksistē kaut kāds logs, kur var skatīt mainīgos. Pagaidām tikai uzbraucot ar peli koda logā.

Jocīgi, ka ģenerētajā kodā iekš main() vispirms ir funkcija HAL_Init(), kura cita starpā nokonfigurē sistēmas taimeri ar savu defaulto takti (16M), saliek pārtraukumu prioritātes u.t.t. un pēc tam vēlreiz tieši tas pats tiek darīts SystemClock_Config(), tikai nu jau ar pareizo takti (manā gadījumā 72M) un par jaunu liek pārtraukumu prioritātes u.t.t.

Labots - Jurkins
Link to comment
Share on other sites

  • 5 weeks later...

Jāiespamo šeit kaut kas. Apnicis jau tas vīruss. ?

Vai DMA circular modē notiek "complete" pārtraukums? Man kaut kā šis mauc nonstopā. Ieliekot  pārtraukuma funkcijā breikpointu, debageris neielec funkcijā un neapstājas. It kā infas baigi daudz, bet tur jau laikam tā problēma.

Link to comment
Share on other sites

  • 2 weeks later...

Skaidrs, ka tagad visiem prātā kroņvīruss, bet vai tad tāpēc visai dzīvei jāapstājas.

Izvilku no tumbočkas šitādu - https://www.ebay.com/itm/USB-Logic-Analyzer-Device-Set-Compatible-to-Saleae-24MHz-8CH-for-ARM-FPGA-M100/324112154593?hash=item4b7696ffe1:g:3HIAAOSwFG1eeJ0S

Kaut kad biju pasūtījis, bet kā iesīkstējis vecis turpināju ņemties pa vecam. Baigā lieta. Iesaku visiem, kuri kaut ko dara ar arduino vai visādiem citiem verķīšiem.

salease.thumb.png.b4b234c49ffd39da8136acc4816e6083.png

Konkrētajā gadījumā parāda, kā nolasās visi SI4432 reģistri. Protams, lētais gals u.t.t. Vairāk par 8 Ms/sek. negrib, lai gan rakstīts 24.

Tagad esmu uzsūtījis šādu -  https://www.ebay.com/itm/DSLogic-Basic-USB-Logic-Analyzer-16Ch-100MHz-4Ch-400MHz-Xilinx-Spartan-6-FPGA-/261859212050?_trksid=p2349526.m4383.l4275.c10#viTabs_0

  • Patīk 1
Link to comment
Share on other sites

Kādu reverso inženieriju? Tak beidz tuftu dzīt.?

Tu saproti vispār, kas ir "loģiskais analizators" un ko viņš dara? "Pieraksta" signālus uz loģiskajām izejām/ieejām.

Labots - Jurkins
Link to comment
Share on other sites

Vot analogo signālu logeri uz pāris kanāliem pa piečuku + būtu interesanti. Pat vairāk par 100kHz nevajadzētu. Ir ģjošie osciļu kiti, bet tie nav logeri.

Link to comment
Share on other sites

Es izmantoju abus divus, plus ir vēl IKA Logic, kas ir diezgan labs. Darbā ir pāris oriģinālie Saleae, gan vecāki gan jaunāki, bet price/performance ziņā iepriekšējie ir labāki.

Tā ķīniešū klona pluss ir ka relatīvi mažiņs, ātri piespraud kautko pārbaudi un iemet atpakaļ kastē kur citi loriņi glabājas. Mīnuss ka viņam Mini USB vads (vismaz manam), kas parasti ir diezgan resns. Plus faktiski nekas cits vairs Mini USB neizmanto, tapēc mūžīgi jāmeklē vads. Kad uz galda pilns jau ar višādiem štrundiem, tad katrs extra restais vads traucē.

IKA Logic tie paši plusi/mīnusi kas ķīnietim, tikai protams sampling rate 200mhz, salīdzinot ar kā teici ķīnieša 8mhz. Software arī interesanta, bet laba. Daudz visādi protokolu decoderi utt.. Abiem protams mīnuss ka tikai 4 kanāli, 8 kanāli es domāju būtu labs kompromiss.

DS Logic man ir viens no pirmajiem modeļiem, vēl no kikstartera. Pa lielam viss taspats kad @Jurkins  linkā, bet USC-C vietā Mini-USB un pats galvenaiss mīnuss salīdzinot ar jaunāko medeli ir ka visi inputi ir uz viena konektora. Ja vajag pieslēgt kādus 8 inputus, tad nākas cīnīties ar to vadu kalnu, plus vēl izpīpēt kurš ir kurš kanāls. Ganjau tapēc viņi sadalija to konektoru vairākos mazākos. Cits mīnuss ka softwāre uz Linuksa pašam jākompilē no source koda :D, nezinu varbūt ka kas mainijies tagad. Bet citreiz vajag kautko fiksi nomērīt, bet skuju, uz konkrētā datora nav softwāres, nākas downloadot, kompilēt, tad atkal kautkas nekompilējas :D vieglāk izvilkt to IKA vai ķinieti (ja nav nekas kritisks)

Labots - AndrisBB
Link to comment
Share on other sites

arī šat tad rotaļājos ar šādu Salae klonu. To nolasīto pieglabāju. Dažos gadījumos rodas vēlme pēc "play" pogas.  Nav kāds gatavs risinājums? laikam nebūs jo gribēšu lai pēc viena kanalā trigera citu "atskaņotu" noteiktā laikā us, ko vajadzētu izdoties no stm, uz arduino par lēnu bija. 

 

pirms 9 stundām , ggg97 teica:

Vot analogo signālu logeri uz pāris kanāliem pa piečuku + būtu interesanti. Pat vairāk par 100kHz nevajadzētu. Ir ģjošie osciļu kiti, bet tie nav logeri.

piespraud arduino nano ar usb vadu pie datora un logo cik uziet, ar SerialPlot, piemēram tas pat izskatās glīti. nu rakstīt uz sd vēl pāris euro klāt, bez datora.

ak 100kHz, nu vvz

Labots - Usins
Link to comment
Share on other sites

Nesapratu īsti. Tu gribi ierakstīt kaut kādus, piemēram, SPI vai I2S vai UART vai HVZ signālus un pēc tam izmantot kā emulatoru?

Link to comment
Share on other sites

  • 11 months later...
Jurkins

Pacelšu mironi (vēl pat gads nav).

Sveiks @AndrisBB!😉

Man atkal ir uznācis stm&c++ periods.🤣 STM32 dzimtajā CubeIde, ja projekts ir izveidots kā c/c++ projekts, tad tikai jāpārdēvē main.c par main.cpp un var darboties tālāk pēc vēlēšanās. Bet makefile projektam tādas fīčas nav. Iekš VSCodes sanāk pliks C. Saprotu, ka būtu derīgi iemācīties taisīt makefile "ar roku", pa lielam jau +/-  saprotu, kas tur tiek darīts, bet vai tomēr nav kāds vieglāks🙄 ceļš?

 

c projektam makefile ir šitāds.

######################################
# target
######################################
TARGET = project_3


######################################
# building variables
######################################
# debug build?
DEBUG = 1
# optimization
OPT = -Og


#######################################
# paths
#######################################
# source path
SOURCES_DIR =  \
Application/MAKEFILE \
Drivers/STM32F1xx_HAL_Driver \
Drivers \
Application/User \
Application \
Drivers/CMSIS

# firmware library path
PERIFLIB_PATH = 

# Build path
BUILD_DIR = build

######################################
# source
######################################
# C sources
C_SOURCES =  \
Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_flash_ex.c \
Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rtc_ex.c \
Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_tim_ex.c \
Src/stm32f1xx_it.c \
Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_dma.c \
Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_cortex.c \
Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_pwr.c \
Src/stm32f1xx_hal_msp.c \
Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc.c \
Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc_ex.c \
Src/rtc.c \
Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rtc.c \
Src/gpio.c \
Src/usart.c \
Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_uart.c \
Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_tim.c \
Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal.c \
Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio.c \
Src/main.c\
Src/system_stm32f1xx.c \
Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_flash.c \
Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio_ex.c  

# ASM sources
ASM_SOURCES =  \
startup_stm32f103xb.s

CXX_SOURCES = \
Src/main.cpp

######################################
# firmware library
######################################
PERIFLIB_SOURCES = 


#######################################
# binaries
#####################\##################
BINPATH = C:/ARM/MCU/bin
PREFIX = arm-none-eabi-
CC = $(BINPATH)/$(PREFIX)gcc
CXX = $(BINPATH)/$(PREFIX)g++
AS = $(BINPATH)/$(PREFIX)gcc -x assembler-with-cpp
CP = $(BINPATH)/$(PREFIX)objcopy
AR = $(BINPATH)/$(PREFIX)ar
SZ = $(BINPATH)/$(PREFIX)size
HEX = $(CP) -O ihex
BIN = $(CP) -O binary -S
 
#######################################
# CFLAGS
#######################################
# cpu
CPU = -mcpu=cortex-m3

# fpu
# NONE for Cortex-M0/M0+/M3

# float-abi


# mcu
MCU = $(CPU) -mthumb $(FPU) $(FLOAT-ABI)

# macros for gcc
# AS defines
AS_DEFS = 

# C defines
C_DEFS =  \
-DUSE_HAL_DRIVER \
-DSTM32F103xB


# AS includes
AS_INCLUDES = 

# C includes
C_INCLUDES =  \
-IInc \
-IDrivers/STM32F1xx_HAL_Driver/Inc \
-IDrivers/STM32F1xx_HAL_Driver/Inc/Legacy \
-IDrivers/CMSIS/Device/ST/STM32F1xx/Include \
-IDrivers/CMSIS/Include

CXX_INCLUDES =  \
-IInc \
-IDrivers/STM32F1xx_HAL_Driver/Inc \
-IDrivers/STM32F1xx_HAL_Driver/Inc/Legacy \
-IDrivers/CMSIS/Device/ST/STM32F1xx/Include \
-IDrivers/CMSIS/Include

# compile gcc flags
ASFLAGS = $(MCU) $(AS_DEFS) $(AS_INCLUDES) $(OPT) -Wall -fdata-sections -ffunction-sections

CFLAGS = $(MCU) $(C_DEFS) $(C_INCLUDES) $(OPT) -Wall -fdata-sections -ffunction-sections

ifeq ($(DEBUG), 1)
CFLAGS += -g -gdwarf-2
endif


# Generate dependency information
CFLAGS += -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)"


#######################################
# LDFLAGS
#######################################
# link script
LDSCRIPT = STM32F103C8Tx_FLASH.ld

# libraries
LIBS = -lc -lm -lnosys
LIBDIR =
LDFLAGS = $(MCU) -specs=nano.specs -T$(LDSCRIPT) $(LIBDIR) $(LIBS) -Wl,-Map=$(BUILD_DIR)/$(TARGET).map,--cref -Wl,--gc-sections

# default action: build all
all: $(BUILD_DIR)/$(TARGET).elf $(BUILD_DIR)/$(TARGET).hex $(BUILD_DIR)/$(TARGET).bin


#######################################
# build the application
#######################################
# list of objects
OBJECTS = $(addprefix $(BUILD_DIR)/,$(notdir $(C_SOURCES:.c=.o)))
vpath %.c $(sort $(dir $(C_SOURCES)))

# list of ASM program objects
OBJECTS += $(addprefix $(BUILD_DIR)/,$(notdir $(ASM_SOURCES:.s=.o)))
vpath %.s $(sort $(dir $(ASM_SOURCES)))

$(BUILD_DIR)/%.o: %.c Makefile | $(BUILD_DIR) 
	@echo $<
	$(CC) -c $(CFLAGS) -Wa,-a,-ad,-alms=$(BUILD_DIR)/$(notdir $(<:.c=.lst)) $< -o $@

$(BUILD_DIR)/%.o: %.s Makefile | $(BUILD_DIR)
	@echo $<
	$(AS) -c $(CFLAGS) $< -o $@

$(BUILD_DIR)/$(TARGET).elf: $(OBJECTS) Makefile
	$(CC) $(OBJECTS) $(LDFLAGS) -o $@
	$(SZ) $@

$(BUILD_DIR)/%.hex: $(BUILD_DIR)/%.elf | $(BUILD_DIR)
	$(HEX) $< $@
	
$(BUILD_DIR)/%.bin: $(BUILD_DIR)/%.elf | $(BUILD_DIR)
	$(BIN) $< $@	
	
$(BUILD_DIR):
	mkdir $@		

#######################################
# clean up
#######################################
clean:
	-rm -fR .dep $(BUILD_DIR)
  
#######################################
# dependencies
#######################################
-include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)

(tutoriāļu ka biezs, bet katrā savādāks pieraksta veids)

 

Pierakstīju :

CXX_SOURCES \

main.cpp                           (main.c no C_SOURCES izdzēsu)

 

CXX_INCLUDES \

 

CXX = $(BINPATH)/$(PREFIX)g++

 

Bet pēc tam sadaļā "build applications" uzkāros. Laikam vajadzētu kaut ko šādu:

 

OBJECTS += $(addprefix $(BUILD_DIR)/,$(notdir $(CXX_SOURCES:.cpp=.o)))
vpath %.cpp $(sort $(dir $(CXX_SOURCES)))

 

un

 

$(BUILD_DIR)/%.o: %.cpp Makefile | $(BUILD_DIR)

... un šeit uzkaros pavisam.

 

p.s. cenšos tagad iebraukt, bet kā jau nožēlojams programmēšanas amatieris😁 par kompilatoriem un linkeriem zinu gaužām virspusēji.

 

p.p.s Kā var to palagu postā dabūt mazāku?

Labots - Jurkins
Link to comment
Share on other sites

AndrisBB

Man nav konkrētā CubeMX versija, tapēc makefiles pavisam savādāks un nevaru pārbaudīt kas tur nekompilējas.

Man ir versija 6.1.0. Iesaku updeitoties, tur ir jaunas fīčas (it īpaši jaunākiem MCU).

 

Faila nosaukumam vai tas .c vai .cpp nav nozīmes, tik cik smukāk, parasta prakse un makefails tā uzrakstīts.

Bet nu tas kas ir, tas kompilējas OK. Īpaši neiedziļinājos kompiliera flagost utt, tik pārkopēju C flagus. Visdrīzāk tur vajag kautko pietjūnēt priekš C++. Kautvai gadījumos kad tā HAL bibliotēka griēs izsaukt funkcijas kas ir C++ faila, tad visdrīzāk neies. Ja C++ lieto tikai C failus, tad ganjau nebūs probēmas, bet ja C kompilētais kods sāks izsaukt C++ kodu, tad visdrīzāk neies. Var vienkārši visu pārkompilēt ar g++ un miers.

Vienīgas kas viņam nepatika, un nezinu kapēc (tas būtu jāizpēta), ir ka clibs (libnano) gribēja syscallus, tapēc piekopēju syscalls.c failu ko izmantoju viskautkam, pārsvarā priekš printf.

Bet pēctam kompilējas.

 

Ieposto kas tev tieši nekompilējas, no plika makefaila jau neko nepateiksi.

 

Makefails prieks Blinky:

Spoiler

 

##########################################################################################################################
# File automatically-generated by tool: [projectgenerator] version: [3.11.0-B13] date: [Sun Mar 14 11:01:00 GMT 2021]
##########################################################################################################################

 

# ------------------------------------------------
# Generic Makefile (based on gcc)
#
# ChangeLog :
# 2017-02-10 - Several enhancements + project update mode
# 2015-07-22 - first version
# ------------------------------------------------

 

######################################
# target
######################################
TARGET = Test_makefile

 

######################################
# building variables
######################################
# debug build?
DEBUG = 1
# optimization
OPT = -Og

 

#######################################
# paths
#######################################
# Build path
BUILD_DIR = build

 

######################################
# source
######################################
# C sources
C_SOURCES = \
Core/Src/stm32h7xx_it.c \
Core/Src/stm32h7xx_hal_msp.c \
Core/Src/syscalls.c \
Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_cortex.c \
Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_eth.c \
Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_eth_ex.c \
Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_rcc.c \
Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_rcc_ex.c \
Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_flash.c \
Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_flash_ex.c \
Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_gpio.c \
Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_hsem.c \
Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_dma.c \
Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_dma_ex.c \
Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_mdma.c \
Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_pwr.c \
Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_pwr_ex.c \
Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal.c \
Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_i2c.c \
Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_i2c_ex.c \
Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_exti.c \
Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_tim.c \
Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_tim_ex.c \
Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_uart.c \
Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_uart_ex.c \
Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_pcd.c \
Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_pcd_ex.c \
Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_ll_usb.c \
Core/Src/system_stm32h7xx.c

 

CXX_SOURCES = \
Core/Src/main.cpp

 

# ASM sources
ASM_SOURCES = \
startup_stm32h743xx.s

 

#######################################
# binaries
#######################################
PREFIX = arm-none-eabi-
# The gcc compiler bin path can be either defined in make command via GCC_PATH variable (> make GCC_PATH=xxx)
# either it can be added to the PATH environment variable.
GCC_PATH = /home/andris/Documents/Tools/gcc-arm-none-eabi-10-2020-q4-major/bin

 

ifdef GCC_PATH
CC = $(GCC_PATH)/$(PREFIX)gcc
CXX = $(GCC_PATH)/$(PREFIX)g++
AS = $(GCC_PATH)/$(PREFIX)gcc -x assembler-with-cpp
CP = $(GCC_PATH)/$(PREFIX)objcopy
SZ = $(GCC_PATH)/$(PREFIX)size
else
CC = $(PREFIX)gcc
AS = $(PREFIX)gcc -x assembler-with-cpp
CP = $(PREFIX)objcopy
SZ = $(PREFIX)size
endif
HEX = $(CP) -O ihex
BIN = $(CP) -O binary -S
 
#######################################
# CFLAGS
#######################################
# cpu
CPU = -mcpu=cortex-m7

 

# fpu
FPU = -mfpu=fpv5-d16

 

# float-abi
FLOAT-ABI = -mfloat-abi=hard

 

# mcu
MCU = $(CPU) -mthumb $(FPU) $(FLOAT-ABI)

 

# macros for gcc
# AS defines
AS_DEFS =

 

# C defines
C_DEFS = \
-DUSE_HAL_DRIVER \
-DSTM32H743xx

 

# AS includes
AS_INCLUDES =

 

# C includes
C_INCLUDES = \
-ICore/Inc \
-IDrivers/STM32H7xx_HAL_Driver/Inc \
-IDrivers/STM32H7xx_HAL_Driver/Inc/Legacy \
-IDrivers/CMSIS/Device/ST/STM32H7xx/Include \
-IDrivers/CMSIS/Include \
-IDrivers/CMSIS/Include

 

# compile gcc flags
ASFLAGS = $(MCU) $(AS_DEFS) $(AS_INCLUDES) $(OPT) -Wall -fdata-sections -ffunction-sections

 

CFLAGS = $(MCU) $(C_DEFS) $(C_INCLUDES) $(OPT) -Wall -fdata-sections -ffunction-sections

 

ifeq ($(DEBUG), 1)
CFLAGS += -g -gdwarf-2
endif

 

# Generate dependency information
CFLAGS += -MMD -MP -MF"$(@:%.o=%.d)"

 

#######################################
# LDFLAGS
#######################################
# link script
LDSCRIPT = STM32H743ZITx_FLASH.ld

 

# libraries
LIBS = -lc -lm -lnosys
LIBDIR =
LDFLAGS = $(MCU) -specs=nano.specs -T$(LDSCRIPT) $(LIBDIR) $(LIBS) -Wl,-Map=$(BUILD_DIR)/$(TARGET).map,--cref -Wl,--gc-sections

 

# default action: build all
all: $(BUILD_DIR)/$(TARGET).elf $(BUILD_DIR)/$(TARGET).hex $(BUILD_DIR)/$(TARGET).bin

 

#######################################
# build the application
#######################################
# list of objects
OBJECTS = $(addprefix $(BUILD_DIR)/,$(notdir $(C_SOURCES:.c=.o)))
vpath %.c $(sort $(dir $(C_SOURCES)))
# list of c++ objects
OBJECTS += $(addprefix $(BUILD_DIR)/,$(notdir $(CXX_SOURCES:.cpp=.o)))
vpath %.cpp $(sort $(dir $(CXX_SOURCES)))
# list of ASM program objects
OBJECTS += $(addprefix $(BUILD_DIR)/,$(notdir $(ASM_SOURCES:.s=.o)))
vpath %.s $(sort $(dir $(ASM_SOURCES)))

 

$(BUILD_DIR)/%.o: %.c Makefile | $(BUILD_DIR)
$(CC) -c $(CFLAGS) -Wa,-a,-ad,-alms=$(BUILD_DIR)/$(notdir $(<:.c=.lst)) $< -o $@

 

$(BUILD_DIR)/%.o: %.cpp Makefile | $(BUILD_DIR)
$(CXX) -c $(CFLAGS) -Wa,-a,-ad,-alms=$(BUILD_DIR)/$(notdir $(<:.cpp=.lst)) $< -o $@

 

$(BUILD_DIR)/%.o: %.s Makefile | $(BUILD_DIR)
$(AS) -c $(CFLAGS) $< -o $@

 

$(BUILD_DIR)/$(TARGET).elf: $(OBJECTS) Makefile
$(CC) $(OBJECTS) $(LDFLAGS) -o $@
$(SZ) $@

 

$(BUILD_DIR)/%.hex: $(BUILD_DIR)/%.elf | $(BUILD_DIR)
$(HEX) $< $@
 
$(BUILD_DIR)/%.bin: $(BUILD_DIR)/%.elf | $(BUILD_DIR)
$(BIN) $< $@
 
$(BUILD_DIR):
mkdir $@

 

#######################################
# clean up
#######################################
clean:
-rm -fR $(BUILD_DIR)
 
#######################################
# dependencies
#######################################
-include $(wildcard $(BUILD_DIR)/*.d)

 

# *** EOF ***

 

 

syscalls.c

 

Spoiler

 

/**
******************************************************************************
* File Name : syscalls.c
* Description : Support files for GNU libc. Files in the system
* namespace go here. Files in the C namespace (ie those
* that do not start with an underscore) go in .c.
******************************************************************************
* This notice applies to any and all portions of this file
* that are not between comment pairs USER CODE BEGIN and
* USER CODE END. Other portions of this file, whether
* inserted by the user or by software development tools
* are owned by their respective copyright owners.
*
* Copyright (c) 2017 STMicroelectronics International N.V.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted, provided that the following conditions are met:
*
* 1. Redistribution of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
* 3. Neither the name of STMicroelectronics nor the names of other
* contributors to this software may be used to endorse or promote products
* derived from this software without specific written permission.
* 4. This software, including modifications and/or derivative works of this
* software, must execute solely and exclusively on microcontroller or
* microprocessor devices manufactured by or for STMicroelectronics.
* 5. Redistribution and use of this software other than as permitted under
* this license is void and will automatically terminate your rights under
* this license.
*
* THIS SOFTWARE IS PROVIDED BY STMICROELECTRONICS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS, IMPLIED OR STATUTORY WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
* PARTICULAR PURPOSE AND NON-INFRINGEMENT OF THIRD PARTY INTELLECTUAL PROPERTY
* RIGHTS ARE DISCLAIMED TO THE FULLEST EXTENT PERMITTED BY LAW. IN NO EVENT
* SHALL STMICROELECTRONICS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
******************************************************************************
*/
 
/******************************************************************************
* If LWIP_SOCKET option is enabled:
* - include this syscalls.c file
******************************************************************************/

 

#ifdef __cplusplus
extern "C" {
#endif

 

/* USER CODE BEGIN 0 */

 

/* USER CODE END 0 */

 

/* Support files for GNU libc. Files in the system namespace go here.
Files in the C namespace (ie those that do not start with an
underscore) go in .c. */

 

#include <_ansi.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/fcntl.h>
#include <stdio.h>
#include <string.h>
#include <time.h>
#include <sys/time.h>
#include <sys/times.h>
#include <errno.h>
#include <reent.h>
#include <unistd.h>
#include <sys/wait.h>

 

/* USER CODE BEGIN 1 */

 

/* USER CODE END 1 */

 

#define MAX_STACK_SIZE 0x2000

 

extern int __io_putchar(int ch) __attribute__((weak));
// extern int __io_getchar(void) __attribute__((weak));

 

/* USER CODE BEGIN 2 */

 

/* USER CODE END 2 */

 

/* USER CODE BEGIN 3 */
caddr_t _sbrk(int incr)
{
extern char end asm("end");
static char *heap_end;
char *prev_heap_end,*min_stack_ptr;

 

if (heap_end == 0)
heap_end = &end;

 

prev_heap_end = heap_end;

 

/* Use the NVIC offset register to locate the main stack pointer. */
min_stack_ptr = (char*)(*(unsigned int *)*(unsigned int *)0xE000ED08);
/* Locate the STACK bottom address */
min_stack_ptr -= MAX_STACK_SIZE;

 

if (heap_end + incr > min_stack_ptr)
{
errno = ENOMEM;
return (caddr_t) -1;
}

 

heap_end += incr;

 

return (caddr_t) prev_heap_end;
}
/* USER CODE END 3 */

 

/* USER CODE BEGIN 4 */
/*
* _gettimeofday primitive (Stub function)
* */
//#ifdef _SYS_TIME_H_
//struct timezone {
// int tz_minuteswest; /* minutes west of Greenwich */
// int tz_dsttime; /* type of dst correction */
//};
//#endif

 

int _gettimeofday (struct timeval * tp, struct timezone * tzp)
{
/* Return fixed data for the timezone. */
// if (tzp)
// {
// tzp->tz_minuteswest = 0;
// tzp->tz_dsttime = 0;
// }

 

return 0;
}
/* USER CODE END 4 */

 

/* USER CODE BEGIN 5 */
void initialise_monitor_handles()
{
}

 

int _getpid(void)
{
return 1;
}

 

int _kill(int pid, int sig)
{
errno = EINVAL;
return -1;
}

 

void _exit (int status)
{
_kill(status, -1);
while (1) {}
}

 

int _write(int file, char *ptr, int len)
{
int DataIdx;

 

for (DataIdx = 0; DataIdx < len; DataIdx++)
{
(void)__io_putchar( *ptr++ );
}
return len;
}

 

int _close(int file)
{
return -1;
}

 

int _fstat(int file, struct stat *st)
{
st->st_mode = S_IFCHR;
return 0;
}

 

int _isatty(int file)
{
return 1;
}

 

int _lseek(int file, int ptr, int dir)
{
return 0;
}

 

int _read(int file, char *ptr, int len)
{
// int DataIdx;

 

// for (DataIdx = 0; DataIdx < len; DataIdx++)
// {
// *ptr++ = __io_getchar();
// }

 

return len;
}

 

int _open(char *path, int flags, ...)
{
/* Pretend like we always fail */
return -1;
}

 

int _wait(int *status)
{
errno = ECHILD;
return -1;
}

 

int _unlink(char *name)
{
errno = ENOENT;
return -1;
}

 

int _times(struct tms *buf)
{
return -1;
}

 

int _stat(char *file, struct stat *st)
{
st->st_mode = S_IFCHR;
return 0;
}

 

int _link(char *old, char *new)
{
errno = EMLINK;
return -1;
}

 

int _fork(void)
{
errno = EAGAIN;
return -1;
}

 

int _execve(char *name, char **argv, char **env)
{
errno = ENOMEM;
return -1;
}
/* USER CODE END 5 */

 

#ifdef __cplusplus
}
#endif

 

/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

 

 

Link to comment
Share on other sites

Izveido kontu, vai pieraksties esošajā, lai komentētu

Jums ir jābūt šī foruma biedram, lai varētu komentēt tēmas

Izveidot jaunu kontu

Piereģistrējies un izveido jaunu kontu, tas būs viegli!

Reģistrēt jaunu kontu

Pierakstīties

Jums jau ir konts? Pierakstieties tajā šeit!

Pierakstīties tagad!
 Share

×
×
  • Izveidot jaunu...