Jurkins Ierakstīts Maijs 13, 2022 Share Ierakstīts Maijs 13, 2022 Skaidrs, ka visiem prātā krāna nojaukšana un karš Ukrainā, bet nu, īstenībā jau dzīve neapstājas. Kā zināms 🤣, man laiku pa laikam uznāk paitona saasinājums, pa laikam c++ saasinājums, pa laikam pastiprinātāju saasinājums, u.t.t. Uznāca c++ saasinājums 🤣. Noskatījos pāris lekcijas par "value based" pārākumu par "type based" metodi (vai kā to nosaukt). Nu un sarakstīju variantu avr, konkrēti populārās atmega 328 - arduino uno, arduino pro nano, laikam vēl kaut kādi I/O portu padarīšanai. Var rakstīt kaut kā tā. #include <avr/io.h> #include "main.h" #include "atmega_328.h" using lcd_7 = pb6; using lcd_6 = pb5; using lcd_5 = pd0; using lcd_4 = pd1; using lcd_3 = pc5; using lcd_2 = pb1; using lcd_1 = pb3; using lcd_0 = pc6; using LCD = IOport<lcd_7, lcd_6, lcd_5, lcd_4, lcd_3, lcd_2, lcd_1, lcd_0 >; int main(void) { LCD::AsOutput(); LCD::Write(0b1111'1111); LCD::AsInput(); uint8_t v = LCD::Read(); while (1) { } } Assemblers gandrīz ideāls. Nav problēmu noportēt uz stm32. Viss strādā. Jautājums... visām funkcijām ar portu kods ir divi varianti - rakstīt vai lasīt kaut ko. template<class Tport, class ... Tports> static inline void dir_as_input_imp(type_pack<Tport, Tports ... >) { dir_as_input_imp(type_pack<Tport>{}); dir_as_input_imp(type_pack<Tports...>{}); } template<class Tport> static inline void dir_as_input_imp(type_pack<Tport>) { constexpr auto port_lines = port_line_pack(just_type<Tport>{}, pin_pack); if constexpr(Tport::port_length == size_of_pack(port_lines)) Tport::AsInput(); else { constexpr auto port_mask = mask_of_pinpack(port_lines); Tport::AsInput(port_mask); } } Atšķirība ir tikai izsaucamā funkcija - šajā gadījumā Tport::AsInput(). Tupīju vēl tajos templeitos. Vai var kaut kādā veidā šo funkciju padot kā parametru? main.h atmega_328.h type_traits.h 1 Link to comment Share on other sites More sharing options...
AndrisBB Maijs 13, 2022 Share Maijs 13, 2022 (labots) Neko nezinu par tēmu un kāds ir jautājums, bet ... Realitāte ir tāda ka tāds kods ir pārāk sarežģīts, tapēc visdrīzāk tiktu izmests un netiktu apstiprināts. Nu vismaz es neapstiprinātu, it īpaši uz mikrokontrolieliem vai kautvai kautkur sistēmas līmenī. Laiks ir nauda, ja kādam jātērē laiks, lai tam izburtos cauri, vai nedod dievs vajag debuggot, kad kautkas neiet. Nu akadēmisku iemeslu pēc jau var kautko čakarēties, bet ne reālajā dzīvē. Labots Maijs 13, 2022 - AndrisBB Link to comment Share on other sites More sharing options...
Jurkins Maijs 13, 2022 Author Share Maijs 13, 2022 Pirms 9 minūtēm , AndrisBB teica: nedod dievs vajag debuggot, kad kautkas neiet. kāpēc neiet? Viss iet. Un vienmēr. Tas kods ir jāuzraksta tikai vienreiz. Pēc tam nevajag rakstīt vairs. Jautājums - vai var kā parametru funkcijas šablonam padot klases šablona funkciju? Pirms 15 minūtēm , AndrisBB teica: bet ne reālajā dzīvē. Nu jā, tas nav mans maizes darbs. Link to comment Share on other sites More sharing options...
AndrisBB Maijs 13, 2022 Share Maijs 13, 2022 Pirms 3 minūtēm , Jurkins teica: kāpēc neiet? Viss iet. Un vienmēr. Nav tāda koda kas vienmēr ietu vienmēr kautkas neiet, it īpaši ja mazliet vairāk par divām funkcijām. Link to comment Share on other sites More sharing options...
AndrisBB Maijs 13, 2022 Share Maijs 13, 2022 Iedomājies tev jādebuggo kautkādu problēma, kas notiek vienreiz pilnmēnesī, tu atver kodu ko nekad neesi redzējis un tur kādas 50k rindas ar kautko tādu. Ne velti ir tāds KISS princips. 1 1 Link to comment Share on other sites More sharing options...
Jurkins Maijs 13, 2022 Author Share Maijs 13, 2022 @AndrisBB, ja paskatās uz arduino vai tā paša stm standarta rsisinājumiem, tad mani kā neprofesionālu programmētāju pārņem izmisums 🤣. Tāpēc jau tagad ir tā, ka parasta aplikācija ir ap 1GB 😁 Bija te variants. Cilvēks uz C# uzraksta kaltēm aplikāciju. Viss it kā darbojas, bet ir gadījumi, kad uzkaras... nu nevar saprast kas tur īsti par lietu, reizēm gļuko, bet ja to koda gabalu ieliek iekš "try... except", tad iet. ĀĀĀĀĀ! Skaidrs, ka iet.... Pirms 2 minūtēm , AndrisBB teica: kautkādu problēma, kas notiek vienreiz pilnmēnesī, Bet kāpēc tādā vienkāršā kodā kaut kam jānotiek reizi pilnmēnesī? Ja šis ir sarežģīts kods, tad... Pirms 4 minūtēm , AndrisBB teica: 50k rindas Tāpēc jau jautāju... nezinu, vai pareizi formulēju... bet vai var klases šablona funkciju padot kā parametru funkcijas šablonam? Link to comment Share on other sites More sharing options...
AndrisBB Maijs 13, 2022 Share Maijs 13, 2022 Kodam ir tieksme mainīties nepārtraukti, kautkas jāpieliek, kautkas jāpamaina, nav tā ka vienreiz uzraksti un tad iet mūžiem. Pat ja tas konkrētais kods iet bez problēmām, tad tas nenozīmē ka pēc gada, kad kautko vajadzēs pamainīt, tu pats atcerēsies ka vispār rakstiji to kodu un čortosies, kurš tādus murgus sarakstījis. Ja nu tomēr kautkas neiet, tad tu jau nezini, niet tur vai kautkur citur. Bet ja kāds cits pēc mēneša mēģina debuggot, tad viņam būs jāpavada ilgs laiks lai vispār saprastu kas tur domāts. Nav jau arī tā ka ja tas kods kompilējas ar gcc 8, tad viņs kompilēsies un darbosies korekti pēc mēneša ar gcc 9, vai vispār citu kompilieri uz kādas citas sistēmas. Visā tajā C++ maģijā, ir miljoniem lietu kas var aiziet greizi. Vispār jau Templeiti uz Mikrokontroliera pa lielam ir liels 'no no' jebkurā gadījumā. Link to comment Share on other sites More sharing options...
Jurkins Maijs 13, 2022 Author Share Maijs 13, 2022 (labots) Kāda starpība uz mikrokontroliera vai kur citur? Tā ir vienkārši metaprogrammēšana - kods, kurš izveido kodu. Kas mk I/O var mainīties? Tad jau praktiski gan std gan stl var norakstīt. Ja ir iznācis uz gcc c++20 un kāds leito gcc ar cc++03, tad... . Visur tak jābūt attīstībai 😁. Labots Maijs 13, 2022 - Jurkins Link to comment Share on other sites More sharing options...
AndrisBB Maijs 13, 2022 Share Maijs 13, 2022 Pirms 16 minūtēm , Jurkins teica: bet vai var klases šablona funkciju padot kā parametru funkcijas šablonam? Ganjau ka var, kapēc lai nevarētu? Atbildi gan nezinu, no templeitiem parasti izvairos, lietoju tik ja nu galīgi baigi vajag. Pirms 2 minūtēm , Jurkins teica: Tad jau praktiski gan std gan stl var norakstīt. Uz MCU jau parasti arī visādus vektorus utt diezko neizmanto. Pārāk bīstami. Link to comment Share on other sites More sharing options...
Jurkins Maijs 13, 2022 Author Share Maijs 13, 2022 Just now, AndrisBB teica: no templeitiem parasti izvairos, lietoju tik ja nu galīgi baigi vajag. Nu ja, es neesmu programmētājs un tas nav mans maizes darbs, bet patīk gan. Link to comment Share on other sites More sharing options...
AndrisBB Maijs 13, 2022 Share Maijs 13, 2022 Tevis paša pieminētajos STM standartrisinājumos. Esi redzējis kaut vienu std, stl utt? Link to comment Share on other sites More sharing options...
Jurkins Maijs 13, 2022 Author Share Maijs 13, 2022 Neesmu. Stm standartrisinājumi ir kaut kas šausmīgs. Īstenībā, domāju, ka tas ir marokāņu 😁programmistu nopelns. Bet dīvaini. Mani parasti šeit lamā par stagnātu😁. Savukārt es esmu pilnīgi atvērts c++23😁... nu jā, zinu gan jau 1% no c++20. Link to comment Share on other sites More sharing options...
Jurkins Maijs 13, 2022 Author Share Maijs 13, 2022 Pirms 9 minūtēm , AndrisBB teica: Pārāk bīstami Var par šo konkrētāk? Kāpēc bīstami? Protams, jautājums, vai tas ir vajadzīgs. Bet kāpēc bīstami? Link to comment Share on other sites More sharing options...
AndrisBB Maijs 13, 2022 Share Maijs 13, 2022 Pa lielam jau tās HAL bibliotēkas netiek rakstītas tikai lai programmētāji varētu manuāli rakstīt kodu un lietot viņas. Tapēc reizēm varbūt tas kods var likties dīvains. Realitāte ir tāda ka tas kkods tiek rakstīts, lai varētu izmantot uz 1000 un 1 dažāda MCU, lai varētu automātiski ģenerēt no vosādiem tūļiem, izmantot visādas testu bibliotēkas, viegli integrēt kautkādos OS. Kas ir īstenībā būtiski, jo nav jēgas no HAL bibliotēkas ja viņu viegli nevar ieintegrēt kādā RTOS. Link to comment Share on other sites More sharing options...
Jurkins Maijs 13, 2022 Author Share Maijs 13, 2022 (labots) Nu jā, neesmu sevi piespiedis apgūt kādu RTOS. Kā neprofesionālis izjūtu nepatiku pret OS mikrokontrolierī. Labots Maijs 13, 2022 - Jurkins Link to comment Share on other sites More sharing options...
AndrisBB Maijs 13, 2022 Share Maijs 13, 2022 Pirms 8 minūtēm , Jurkins teica: Var par šo konkrētāk? Kāpēc bīstami? Viss jau atkarīgs no konkrētās applikācijas. STL izmanto heapu un dinamosko atmiņas izdalīšanu. Esi pārliecināts ka agrāk vai vēlāk neiebrauksi kautkādās divainās atmiņas fragmentācijas problēmās? Pirms 4 minūtēm , Jurkins teica: Nu jā, neesmu sevi piespiedis apgūt kādu RTOS. Zephyr nav ne vainas. https://www.zephyrproject.org/ Link to comment Share on other sites More sharing options...
Jurkins Maijs 13, 2022 Author Share Maijs 13, 2022 Just now, AndrisBB teica: atmiņas fragmentācijas problēmās? Mož tupiju... ne jau visas std/stl funkcijas izmanto Tevis minētās lietas. Kāda starpība bīstamībai, vai tas notiek uz avr, arm vai x86-64. Tad jau tajās problēmās var iebraukt uz jebkuras arhitektūras. Link to comment Share on other sites More sharing options...
AndrisBB Maijs 13, 2022 Share Maijs 13, 2022 (labots) Nu ja tu paņem kautkādu ARM Cortex ar teiksim 100kb brīvu atmiņu iedalītu heapam. Tad randomā malloco un atbrīvo kautkādus objektus izmēros teiksim 200b līdz 2kb. Cik daudz laika vajadzēs, līdz tu vairs nevarēsi izveidot jaunus 2kb objektus, jo nebūs vairs 'spraugas', kur viņu iespraust? Kautgan lielākā daļa atmiņas ir itkā brīva. x86 un resnākiem ARM pavisam cits stāsts, tur ir bezgalīga virtuālā atmiņa un MMU. Labots Maijs 13, 2022 - AndrisBB Link to comment Share on other sites More sharing options...
Jurkins Maijs 13, 2022 Author Share Maijs 13, 2022 Mana savārstījuma 😁 gadījumā vispār nekādi objekti netiek veidoti. Pat speciāli no tā notiek intensīva atkratīšanās. Link to comment Share on other sites More sharing options...
AndrisBB Maijs 13, 2022 Share Maijs 13, 2022 https://cpp4arduino.com/2018/11/06/what-is-heap-fragmentation.html Pirms 1 minūtes , Jurkins teica: Mana savārstījuma 😁 gadījumā vispār nekādi objekti netiek veidoti. Tas vairāk bij domāts par STL kopumā. 1 Link to comment Share on other sites More sharing options...
Jurkins Maijs 13, 2022 Author Share Maijs 13, 2022 (labots) Nu tas laikam šoreiz nebūs. Reāli kods nekur tālāk par reģistriem neiet. Nekādi malloc un new vispār nav paredzēti. Doma tāda, ka maksimāli viss iespējamais notike compile time. p.s. arduino ir šausmīgs savā būtībā 😁 Labots Maijs 13, 2022 - Jurkins Link to comment Share on other sites More sharing options...
Jurkins Jūnijs 5, 2022 Author Share Jūnijs 5, 2022 Tā... nu laikam jau tupīju. Bet nesaprotu kur. Reku jūtūbes lekcija 25:10 nestrādā tās funkcijas. Šamās nemaz nav jākompilē. Tas viss ir kompile taime. Rāda kļūdu uzreiz. Varbūt problēma, ka uz win pēdējais gcc ir 10.3, bet aktuālais ir 11.* Mož kāds uz pingvīna var nočekot? Link to comment Share on other sites More sharing options...
AndrisBB Jūnijs 5, 2022 Share Jūnijs 5, 2022 Ar kādu C++ standartu tu kompilē? Link to comment Share on other sites More sharing options...
Jurkins Jūnijs 5, 2022 Author Share Jūnijs 5, 2022 20 Link to comment Share on other sites More sharing options...
AndrisBB Jūnijs 5, 2022 Share Jūnijs 5, 2022 Skatos uz dokumentāciju un neredzu neko pat līdzīgu tavam kodam. Slinkums to video skatīties. https://en.cppreference.com/w/cpp/algorithm/all_any_none_of Link to comment Share on other sites More sharing options...
Jurkins Jūnijs 5, 2022 Author Share Jūnijs 5, 2022 Tas nebūs tas, man šķiet. Šīs nav std::ranges::... funkcijas. Te tēma ir par to, ko Aleksandresku kādreiz darīja ar loki.h bibleni ar klasēm/struktūrām, tagad var darīt ar funkcijām. Link to comment Share on other sites More sharing options...
AndrisBB Jūnijs 5, 2022 Share Jūnijs 5, 2022 Neizskatās rak 'ranges' būtu īpaši savādākas. https://en.cppreference.com/w/cpp/algorithm/ranges/all_any_none_of Jebkurā gadījumā neko nezinu, tādas izvirtības neizmantoju. Link to comment Share on other sites More sharing options...
Jurkins Jūnijs 5, 2022 Author Share Jūnijs 5, 2022 Līdzība ir. Bet tās nav std:: funkcijas. Link to comment Share on other sites More sharing options...
AndrisBB Jūnijs 5, 2022 Share Jūnijs 5, 2022 Kuras nav std funkcijas? Vide vai dokumentācijā? Link to comment Share on other sites More sharing options...
Jurkins Jūnijs 5, 2022 Author Share Jūnijs 5, 2022 Tās no video tikai nosaukumi sakrīt ar std:: funkcijām template<class F, class ... Ts> constexpr bool all_of(F f, type_pack<Ts...>) { return (... && f(just_type<Ts>{})); } šim būtu jāatgriež true: constexpr auto res = all_of<std::is_pointer>(type_pack<uint16_t*, uint8_t*, uint32_t*>{}); Link to comment Share on other sites More sharing options...
AndrisBB Jūnijs 5, 2022 Share Jūnijs 5, 2022 Tad kam tev tādas, ja tās nav std: funkcijas? Ja jau nav, tad attiecīgi linko iekšā bibliotēku no kurienes viņas nāk. Link to comment Share on other sites More sharing options...
Jurkins Jūnijs 6, 2022 Author Share Jūnijs 6, 2022 Tā nav bibliotēka. Vienkāršas "ar roku" uzrakstītas funkcijas speciāli compile time operācijām. Manā iepriekšējā postā - funkcija all_of pārbauda, vai visiem tipiem, kas iepakoti iekš "type_pack" (jo tikai tā tipus var iedot funkcijai kā parametrus) izpildās attiecīgā funkcija. Viss iepriekšējais no tās lekcijas man strādā, bet šajā vietā sāk mest kļūdu. p.s. tīri akadēmiska interese. Ar šitām izvirtībām varētu skaistāk (un drošāk) uzrakstīt to, kas man strādā. Link to comment Share on other sites More sharing options...
AndrisBB Jūnijs 6, 2022 Share Jūnijs 6, 2022 Ja gribi čakarēt sev smadzenes, nevis rakstit kodu, tad ņem Rust. Gan labāks, gan drošāks, gan savā ziņā glītāks kods sanāks. Īstenībā uz MCU pat Rust būs piemērotāks nekā C++ ar saviem templeitiem. Link to comment Share on other sites More sharing options...
Jurkins Jūnijs 7, 2022 Author Share Jūnijs 7, 2022 OK, paskatīšos to Rust, esmu tikai dzirdējis, ka tāds ir. Bet pačakarēt smadzenes man patīk 😁. Bet to figņu atrisināju. Nezinu, kas tam čalim par kompilatoru, bet tā, kā viņam ir, tam vispār nevajadzētu strādāt. Kompilators nevar (kā iztulkot pareizi?) couldn't deduce template parameter). Dabūju mingw 12.1 ar C++23, tāpat neprot. Ja funkciju ieliek lambdā, tad strādā. template<class F, class ... Ts> constexpr bool all_of(F f, type_pack<Ts...>) { return (... && f(just_type<Ts>{})); } static_assert(all_of([](auto v){return std::is_pointer_v<typename decltype(v)::type>;}, type_pack<uint16_t*, uint16_t*>{})); Link to comment Share on other sites More sharing options...
AndrisBB Jūnijs 7, 2022 Share Jūnijs 7, 2022 Ganjau kautkas llvm bāzēts. Man liekas ka vairāk var iemācīties kautko reāli praktisku taisot, nekā burties cauri kautkādiem teorētiskiem variantiem kam visai apšāubāmi pielietojumi dzīvē. Link to comment Share on other sites More sharing options...
AndrisBB Jūnijs 7, 2022 Share Jūnijs 7, 2022 Lielākoties jau C++ priekš 'software engineering' un 'embedded system' īpaši nepārklājas. Pēc pielietojuma industrijā var teikt ka tās ir divas dažādas pasaules. Link to comment Share on other sites More sharing options...
Jurkins Jūnijs 7, 2022 Author Share Jūnijs 7, 2022 Pirms 16 minūtēm , AndrisBB teica: var iemācīties kautko reāli praktisku taisot, Jā, nu man nezin vai šī mācīšanās noderēs naudas pelnīšanā. Un es šo konkrēti izmantoju darbojoties ar mcu reģistriem. No loģiskā saprāta viedokļa gan jau 50+ pilnīga bezjēga 😁, bet man patīk. Link to comment Share on other sites More sharing options...
AndrisBB Jūnijs 7, 2022 Share Jūnijs 7, 2022 Var jau viskautko samācīties, pielietot visādas nišas fīčas, bet tad kad jāsāk taisīt kautkas praktisks, tad nākas pielietot dažņedažādas bilbliotēkas, ar kurām tas viss vienkārši nedarbisies, katra savā stilā, kautkā mēģināt savilkt to visu kopā. Pa vidam protams citi kolēģi ar savām idejām kā jāraksta kods Link to comment Share on other sites More sharing options...
Jurkins Jūnijs 7, 2022 Author Share Jūnijs 7, 2022 @AndrisBB, nestrīdos 😉. Tu to noteikti zini daudz, daudz labāk. Bet es neesmu izstrādātāju komandā, man nav kolēģu, ar ko kašķēties 😁. Link to comment Share on other sites More sharing options...
Recommended Posts
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 kontuPierakstīties
Jums jau ir konts? Pierakstieties tajā šeit!
Pierakstīties tagad!