Jump to content

Rakstīt kodu priekš STM32 izmantojot VS Code


AndrisBB
 Share

Recommended Posts

Jurkins

Oj! Toč. 6. versija. Es uzinstalēju un kaut kā pat neapskatījos, vai pēdējā versija. Sākšu ar to. Varbūt tur arī būs risinājums, kaut daļējs.

Paldies par meikfailu, apmēram sāku iebraukt. Pastudēšos.

Pārkpmpilēt visu ar g++, vai Tu domā arī c failiem gcc vietā ierakstīt g++?

Link to comment
Share on other sites

AndrisBB
Pirms 8 minūtēm , Jurkins teica:

Pārkpmpilēt visu ar g++, vai Tu domā arī c failiem gcc vietā ierakstīt g++?

Tieši tā.

Ne velti tur visos .h failos ir

#ifdef __cplusplus
extern "C" {
#endif

Tas (tas headers)  gan neattiecas tieši uz c failu kompilēšanu ar g++, bet nu sava saistība ir.

Link to comment
Share on other sites

Jurkins

Ja mēģinu ar g++ nokompilēt main.cpp, tad izmet šitādu:

Spoiler

c:/arm/mcu/bin/../lib/gcc/arm-none-eabi/8.2.1/../../../../arm-none-eabi/bin/ld.exe: c:/arm/mcu/bin/../lib/gcc/arm-none-eabi/8.2.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-signalr.o): in function `_kill_r':
signalr.c:(.text._kill_r+0xe): undefined reference to `_kill'
c:/arm/mcu/bin/../lib/gcc/arm-none-eabi/8.2.1/../../../../arm-none-eabi/bin/ld.exe: c:/arm/mcu/bin/../lib/gcc/arm-none-eabi/8.2.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-signalr.o): in function `_getpid_r':
signalr.c:(.text._getpid_r+0x0): undefined reference to `_getpid'
collect2.exe: error: ld returned 1 exit status
make: *** [Makefile:183: build/project_4.elf] Error 1
The terminal process "cmd.exe /C make -s -j 10 all" terminated with exit code: 2.

183. rinda

 

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

Labots - Jurkins
Link to comment
Share on other sites

AndrisBB

skat. ieteikumu par suscalls.c pielikšanu

Vai arī kompillē libc_nano bez syscalliem

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

AndrisBB
(labots)

Ja tu syscallus neizmanto, tad kompilē bez. Tāpat jau neviens no viņiem manā piemērā nemaz nav implementēts. Bet nu ja paskatīsies manus iepriekšējos video, tad redzēsi ka viņi vajag, lai piemēram dabūtu printf darboties utt. Lielākā daļa gan aktuāli tikai ja lieto ar OS. Ja plāno izmanto malloc utt, tad gan bez caddr_t _sbrk(int incr) neiztiksi.

Piemēram tas pats par ko viņš dusmojās - signalr.c:(.text._getpid_r+0x0): undefined reference to `_getpid'. Ja tev nav OS, tad kāda tur var būt runa par PID (Process ID).
 

Slinkums meklēt, kāds bij flags ganjau vari pats atrast.   

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

Jurkins

Nu pirmais solis jau bija piedabūt, lai vispār strādā.

Kaut kā pavisam cits ir, ja GUI jāizvēlās tie flagi vai šeit jāieraksta pašam.😁

 

Meklēdamies atradu šitādu. Ja pareizi saprotu, tad tur ar roku nevajag, piemēram, pievienot jaunu failu.

Labots - Jurkins
Link to comment
Share on other sites

AndrisBB

Ja vien tu diendienā nenodarbojies ar Meikfailu rakstīšanu/rediģēšanu, tad neredzu baigo jēgu tur iedziļināties. Ja strād;a, tad strādā.

Ja gribi kautko rakstīt no nulles, tad ir pietiekami daudz interesantākas un modernākas alternatīvas, kautvai https://waf.io/

Bet tad viss lielākiem projektiem, te pietiek ar 3 rindu meikfailu.

 

Lielāka jēga fokusēties uz kodu. 

  • Atbalstu 1
Link to comment
Share on other sites

Jurkins
pirms 2 stundām , AndrisBB teica:

Lielāka jēga fokusēties uz kodu. 

Piekrītu, bet tomēr būtu bišķi jāsaprot, kur ieslēgt optimizāciju vai uzlikt -std=c++17 un tamlīdzīgi.

Link to comment
Share on other sites

AndrisBB
(labots)

Kam tev vispār C++ uz STM32? Neredzu īpašu jēgu. Tāpat visas bibliotēkas utt ir Cun ja arī rakstīsi C++, tad tas vairāk būs kā C ar klasēm, jeb C+. :D

Nekādas īpašās C++ fīčas jau tāpat neizmantosi. Tak nelietosi tur Vectorus un C++ stringus, templeotus un lambdas. (Cerams domu saprati).

Ja tīri ziņkārības pēc, tad es drīzāk paskatītos ko var izdarīt ar Rust.

 

Tagad pa brīvo laiku esu sācis vairāk iedziļināties iekš Zephyr OS prieks STM32 (un citiem), pašam interesē un darbā esu pielikts kā "skatītājs no malas" un sanity/koda reviewers 2 projektiem, kas kā reiz uz tās OS. Pagaidām gan tikai sēžu un klausos, sad tad kādu ideju no Linuxa iesviežu :D

 

Labots - AndrisBB
Link to comment
Share on other sites

Jurkins
Pirms 16 minūtēm , AndrisBB teica:

Kam tev vispār C++ uz STM32?

😁 Process patīk. Zinu, ka esmu ar dīvainībām 😁.

Kamēr slimoju ar kovidnieku izbraucu cauri šim. Šo to pārrakstīju savādāk. Šur tur vēl tupiju. 😁 Bez c++ nekā. Tu jau reiz šo avotu nokritizēji 😉, ka galīgi garām. Bet man patīk. Nodefinēju virtuālo (ja tā var teikt) portu:

VPort<Pb4, Pb5, Pd7, Pc1> LCD;

Uz plates būtu vienkāršāk savilkt, piemēram, ja Pd7 vietā būtu Pc6. Nav problēmu. Pamainu tikai Pd7 uz Pc6. Un kode ģenerējas tāds, ka gandrīz kāds asmā būtu kodējis (tas gan mūslaikos laikam nav svarīgi). Nu vot patīk un viss. Gribu tagad paņemties līdzīgi ar stm32 (zinu, ka izgudroju velosipēdu). Nu tāds amatieris-dīvainis 😁

 

Bet vispār jau paņem kaut kādu sensoru. Biblene uz c++... Pie tam vēl "#ifdef Arduino... , #ifdef mbed...

 

Link to comment
Share on other sites

Jurkins

Sveiks, @AndrisBB!

Klau, a bet iekš vscode var kaut kādā veidā debagošanas procesa laikā paskatīties, assemblera kodu līdzīgi kā CubeIde logs "disassembly" vai pat vecajam labajam AtmelStudio?

 

 

Link to comment
Share on other sites

AndrisBB
(labots)

 

Ja tu pie C flagiem pieliec -save-temps, tad viņš build folderī saglasās arī *.s failus. =obj saglabā blakus .o failam,bet nu vari jau arī norāīit kur citur, piemēram blakus .c failam. Skaties -dumpdir ./. optionu.

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

Reku plugins, neizskatās diezko labi nostrādāts, bet itkā darbojas.

https://marketplace.visualstudio.com/items?itemName=dseight.disasexpl

 

Tik pamaini settingus kur meklēt .s failu. Vai arī liec .s failu blakus .c failam un tad jāiet pa defaulto.

Es fiksi izmēģināju šādi, slinkums meklēt kāds ir mainīgais priekš build foldera :)

 

 

"disasexpl.associations": {
"**/*.c": "/home/andris/Documents/Projects/OV7670/FreeRTOS_OV7670_Capture/build/${fileBasenameNoExtension}.s",
"**/*.cpp": "/home/andris/Documents/Projects/OV7670/FreeRTOS_OV7670_Capture/build/${fileBasenameNoExtension}.s"
}

 

Labots - AndrisBB
Link to comment
Share on other sites

Jurkins

Paldies! Tas Cortex-Debug strādā. Tiešām dīvaini, bet strādā.

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