Ang pagsusulat ng mga nabibitbit na kodigong C para sa mga aparatong IoT ay isang pundamental na kasanayan para sa mga naitanim na developer na nangangailangang maglagay ng mga aplikasyon sa iba't ibang platapormang hardware. Ang IoT ecosystem ay sumasakop sa mga microcontrol na may ARM Cortex-M, RISC-V, AVR, at proprietary architecture, na ang bawat isa ay may natatanging mga mapa ng memorya, ang mga equarential regulator, at ang coomergender criper cripeture ay nagbibigay ng isang praktikal na ents. Kung walang sinasadyang disenyo para sa isang puntirya, ang mga pamamaraang pinag-a-a-a-a-a-a-a-a-a-a-g propliked na may-ed na may-ed na may mga praktikal na mga praktikal na pag-ed na mga pamamaraan.
Pag - unawa sa Pagiging Kabihasaan sa Pag - unlad ng IoT
Ang pagiging madaling makuha ay hindi lamang basta isang paraan ng pag - aayos ng mga produkto sa iba't ibang arkitektura ng hardware na may kaunti o walang pagbabago. Sa daigdig ng IoT, ang pagiging madaling gamitin ay hindi lamang basta isang madaling gamiting mga kagamitan sa negosyo.Ang mga produktong ginagamit sa mga henerasyon ng produkto ay mahaba, ang mga kadenang pantustos ay patuloy na nagbabago, at ang bagong silicon ay lumilitaw ay laging nagpapahintulot sa iyo na gamiting muli ang umiiral na mga kagamitang firmwer sa loob ng mga salinlahi ng produkto, mabilis na inihuhugpong ang mapagpipiliang mga sangkap sa panahon ng mga produktong galing sa salapi.
Sa isang dulo, ang code na kumpletong platform staindependent (hal., generic na pag-uuri ng algorithms) ay naglalaman ng mga impormasyong hindi maitatantiya saanman. Sa kabilang dulo, ang kodigo na tuwirang nag - impluwensiya sa mga hardware regulator ay likas na hindi maaaring ilipat. Ang tunguhin ng nabibitbit na C para sa IoT ay ang ibukod ang hindi maitatab na mga detalye sa likod ng mga suson ng abstrakto upang ang pangunahing lohika sa negosyo at algorithm code ay manatiling magagamit - muli.
Karaniwang mga Hamon sa Pag - aayos ng Kodigo
Ang ilang mababang salot ng pagkakaiba sa mga lugar ng lindol ay nabaon sa panganib:
- [[Endianness.[ Ang ARM Cortex ⁇ M at AVR ay mga maliliit na points o unyon sa mga order ng byte ay humahantong sa di-umano'y data corruption.
- Maaaring 16 na piraso sa isang 8°bit AVR, 32 bits on a Cortex STRM0, at 64 na piraso sa isang RISC ARV 64°bit processor. Code na nagpapalagay ay eksaktong 32 bits.
- [[Regist] Ang mga pagkakaiba sa mapa. Kahit ang dalawang MCU mula sa parehong tindero ay kadalasang may magkaibang mga peripheral base address, bit field, at configuration sequences.
- Ang mga ekstensiyong pang-Compiler at pragmas. GC, IAR, ARM Compiler 6, at Keil ay may kani-kaniyang dialekto at inline assembly dialects.
- Memory structure and kahilera. Ang ilang mga plataporma ay nangangailangan ng mahigpit na pagkakahanay para sa 32°bit access; ang iba ay humahawak ng maling akses na may isang fault handler.
- Ang interrupt handing and stack usering.[ Interrupt vectors, mga presyective model, at domestic pag-uugali ay malawak na magkakaiba.
Mga Pangunahing Estratehiya sa Pagsulat ng Portable C Code
Hardware Isang Pag - aalis ng Payero (HAL)
Ang pinakamakapangyarihang kasangkapan sa nabibitbit na arsenal ng ALCE ay ang isang hardware abstraksyon layer.[1] [[1] [[1] [[FL] [[FL] ⁇ ] [[kailangan ng sanggunian] Ang isang mahusay na quartured standing ay naglalantad ng isang unipormeng API para sa mga karaniwang peripheral (GPIO, UART, I2C, SPI, timers) habang itinatago ang mga naka-pargmentong rehistrong rehistro [[T] [[T] [[T] [[T] [[T] [[T] [[T] [[T] [[T] [[T] [[T] [[T]:T] [[T] [[T] [[T] [[T] [[T]] [[T]] [[T] [[T]] [[T]] [[T]]] [[T] [[T]] [[T]] [[T] [[T] [
Ganito ang isang karaniwang huwaran ng pagpapatupad ng HAL:
// hal_gpio.h (common)
typedef uint8_t gpio_pin_t;
typedef uint8_t gpio_port_t;
void hal_gpio_set_output(gpio_port_t port, gpio_pin_t pin);
void hal_gpio_set_high(gpio_port_t port, gpio_pin_t pin);
void hal_gpio_set_low(gpio_port_t port, gpio_pin_t pin);
Ang mga file na platform stapecific (e.g., ) ay naglalaman ng aktuwal na rehistrong rehistro. kapag lumilipat sa bagong MCU, tanging ang mababang gluelevel HAL ang nangangailangan ng panibagong regulator, habang ang lahat ng mas mataas na patong ay nananatiling hindi nai-record.
Pag - aampon ng mga Pamantayang Aklatan
Ang C standard library ay nagbibigay ng isang nabibitbit na pundasyon para sa maraming karaniwang operasyon. ang mga functions tulad , , strand utilies, at mga gawain sa matematika ay makukuha sa bawat pag-ayon na Cutlider.Ang pag-iwas sa mga palagay tungkol sa mga panloob ng aklatan ay kritikal na periment unclew rewrite para sa pagsasagawa malibang napatunayan mo na ang iyong recointeriversitations ay hindi sapat.
Para sa mga sistemang IoT na may limitadong memorya, isaalang-alang ang paggamit ng isang subset ng pamantayang aklatan (tulad ng newlib[nano[ sa ekosistema ng GCC) sa halip na paggulong ng iyong sariling mga rutinang strando.[2] Sa katulad na paraan, ang macro at ay isang mahusay na reperensiya para sa pang-unawa. [[2] [[T] [[T] Ang isang mahusay na pagtukoy ay isang maalamankalang-alang-alanggalanganing pang-alangan.[3][3] ay isang mahusay na pang-alanggunianlung pang-alanggunianlung pang-alang pang-alanggunian.
Paggamit ng mga Uri ng Sapat na Tubig na DeficidWidth Data
Laging gamitin ang mga uri mula sa at upang ipahayag ang mga integer variable na may malinaw na lapad: , , , , atbp. Iwasan ang kapatagan , , o[T:TL] para sa anumang bagay na dapat malaman ang laki (paglilinaw) at ang [[T] [[T] [[T] [[T] [[2] [[2] [[T] [[2] [[2], na ang paliwanag] [[2] [[2]:] [[2] [[2], na ang paliwanag] [[2] [[2] [[2]:] [[2], na ang paliwanag] [[2] [[2] [[2] [[2] [[2] [[2] [[2] [[2] [[2] [[2] [[2
Kapag kailangan mong i - serise ang impormasyon sa kabila ng mga sasakyang may kinalaman sa mga sasakyan, pagsamahin ang mga uri ng rexowwidth at ang mga gawaing byte commission (, , o ang kanilang nabibitbit na mga katumbas).
Ang Pagpasa ng Kalagayan
Ang mga tagubilin bago ang pagproseso ay isang lehitimong kasangkapan para sa platform calclespecific code, ngunit dapat gamitin nang tama ang mga ito.
// platform_config.h
#if defined(STM32L4)
#define PLATFORM_STM32L4
#elif defined(EFM32GG)
#define PLATFORM_EFM32GG
#else
#error "Unsupported platform"
#endif
Pagkatapos sa kodigo, gamitin ang generic kapag talagang kailangan. Tandaan na kapag labis - labis , nagiging mahirap basahin at panatilihin ang kodigo.
Pagbawas sa mga Dependel na Kalagayan
Bago magdagdag ng dependensiya, tiyakin na sinusuportahan nito ang lahat ng iyong pinupuntiryang arkitektura at na hindi nito hinihila ang mga palagay na hindi maaaring iulat. Ang mga aklat na isinulat nang lubusan sa nabibitbit na C (e.g., ] ay mas ligtas kaysa sa mga umaasa sa sariling koleksiyon o sa Ang mga aklat na isinulat nang walang tulong ng mga aklat ay mas ligtas kaysa sa mga nasa loob ng mga kagamitang pang - uri na maaaring gamitin nang walang aksayang na kagamitan.
Link: Ang artikulo Embended.com tungkol sa tunay na regulatoryw na C code ay nagbibigay ng karagdagang perspektibo sa pagaayos ng mga dependensiya.
Praktikal na mga Mungkahi Upang Mapasulong ang Pagiging Magkabahagi
Sumulat ng Modular Code
Ang paghihiwalay na ito ng mga bagay na ikinababahala ay dapat maglantad ng silbi ng mga ito sa pamamagitan ng mga kagamitang de - kuryente sa pamamagitan ng header file at itago ang panloob na mga detalye nito.
Mga Dependensiya ng Dodware ng dokumento
Maliwanag na gamitin ang mga komento upang ipaliwanag kung bakit pinili ang isang partikular na paraan na hindi maaaring iulat, kung anong mga plataporma ang ginagamit nito, at kung ano ang kailangang baguhin para sa ibang puntirya.
Gumamit ng mga Kasangkapan sa Pagtatayo ng Cross Platform
Magtayo ng mga sistemang katulad ng o Meson] ay maaaring magsagawa ng maramihang mga pagtatakda ng mga pag-aayos ng target mula sa isang solong proyektong istraktura. Halimbawa, pinapayagan ka ng CMake na magtakda ng mga talaksang pang-aritika para sa bawat plataporma at magtakda ng mga kahulugang pang-impormasyon batay sa puntirya. Ito ay nag-aalis ng pangangailangan para sa mga hiwalay na mga talaksang proyekto para sa IAR, Keil at GCC. [L] Ang mga halimbawang pang-PLC.[4] ay nagbibigay ng mga sangguniang pang-CTC.[T] Ang mga halimbawa ay nagbibigay ng mga sanggunian[5][T][T][T] ay nagbibigay ng mga halimbawa ng mga sanggunian:[5][T][5]
Gamitin ang mga Pamamaraan sa Pag - aayos ng mga Bat calculus
Kapag naglalagay o nag - aalis ng mga piraso sa mga rehistro, iwasang sumulat ng absolutong maskara na may mga markang bit threamfield., gumamit ng makasagisag na mga constant na binigyang - kahulugan sa HAL, at gumamit ng macros o inline works para sa ligtas na mga operasyon ng bit:
#define BIT_SET(reg, bit) ((reg) |= (1u << (bit)))
#define BIT_CLEAR(reg, bit) ((reg) &= ~(1u << (bit)))
Define bilang isang abstraktong parameter sa halip na isang literal na integer. sa ganitong paraan, kung ang bit position ay nagbabago sa isang iba't ibang MCU, tanging ang patuloy na depinisyon ang dapat magbago, hindi ang paggamit sa buong codebase.
Pagsubok at Pag - aalis ng mga Obserbasyon sa Iba't Ibang Lugar
Ang mga pag-aangkin ng Portable ay dapat na value. Gamitin ang patuloy na pagsasanib (CI) na nagtatayo ng iyong proyekto para sa lahat ng mga suportadong plataporma. Sa CI, patakbuhin ang static analysis na mga kasangkapan tulad ng PC regulatort]]PC STRElint[1] upang ma-secasure ang maling paggamit ng mga hindi-interportable na mga gusali. Para sa function, gumamit ng emulators (eg., QMUMUMT:3] upang ma-Ro designor ang isang karaniwang mga process para sa process. Ang mga kasangkapangor ay ang mga kasangkapang pang-GREPORCORCORCORCORDORCORCEEEE.
Ang mga pagsubok sa regression ay dapat na magsagawa ng lahat ng HAL APIs sa bawat plataporma upang mahuli ang mga incompatibilidad sa simula. Ang isang pagsubok tulad ng ⁇ write a byte sa isang UART, basahin ito pabalik sa isang prespiback ⁇ ay maglalantad ng mga pagkakaiba sa panahon o peritubility sa pagitan ng mga pagpapatupad ng UART.
Pagsasaayos
Ang pagsulat ng nabibitbit na kodigong C para sa mga kagamitang IoT ay hindi isang disiplina pagkatapos ng pag - iisip na dapat na ilagay sa arkitektura mula sa isa. Sa pamamagitan ng pamumuhunan sa isang hardware abtract layer, pagsunod sa pamantayang mga uri at aklatan, paggamit ng kondisyong pag - iipon nang kaunti, at maingat na pagsusuri sa mga target, lumilikha ka ng mga kagamitang maaaring makaligtas sa di - maiiwasang mga pagbabago sa tanawin ng hardware.