การเขียนรหัส C แบบพกพาสําหรับอุปกรณ์ ICT เป็นทักษะพื้นฐานสําหรับนักพัฒนาที่ฝังตัวอยู่ ซึ่งต้องปรับใช้โปรแกรมผ่านแพลตฟอร์มฮาร์ดแวร์ต่าง ๆ รหัส IOT ครอบคลุมระบบนิเวศแบบ IMRT ไมโครคอนโทรลกับ ARM Cortex-M, ViC-VR และสถาปัตยกรรมแบบรวมเข้ากับโครงสร้างพื้นฐาน โดยแต่ละแบบหน่วยความจําแบบเฉพาะตัว, แบบบันทึกความทรงจําแบบเฉพาะ, และแบบถอดความบิดเบือน โดยไม่ต้องตั้งใจสําหรับการออกแบบพอร์ตหนึ่งแบบ สําหรับเป้าหมายที่มักจะทํางานเพื่อทําลายอีกเป้าหมายหนึ่ง ส่งผลให้ซ่อมแซมและฝันร้าย บทความนี้ยังเป็นโครงสู่ความสําเร็จจริงในระบบย่อยของระบบซีรีส์, และทางยุทธวิธีต่าง ๆ ที่ฝังแนบมา, และใช้กลยุทธ์เชิงปฏิบัติได้
การ เข้าใจ ความ สําคัญ ของ การ พัฒนา แบบ ไอโอต
การละเมิดลิขสิทธิ์ หมายถึง โค้ดของแหล่งสามารถถูกคอมไพล์และประมวลผลบนโครงสร้างฮาร์ดแวร์ที่แตกต่างกันได้ โดยมีโครงสร้างน้อยหรือไม่มีการแก้ไขเลย ในโลกของ ไอโอที พอร์ทความจุไม่ได้เป็นเพียงปัจจัยที่สะดวก -- ความจําเป็นของธุรกิจ วงจรชีวิตนี้ยาว ห่วงโซ่อุปสงค์ และระบบซิลิคอนใหม่ปรากฏเสมอ รหัสแบบพกพาช่วยให้คุณสามารถใช้ ซอฟต์แวร์ที่ทํางานอยู่ได้ตลอดหลายรุ่น โดยด่วนสําหรับส่วนประกอบอื่น ๆ ระหว่างการขาดแคลน และลดเวลาการจําหน่ายของผลิตภัณฑ์
ความจุมีอยู่บนสเปกตรัม อีกด้านหนึ่งคือ รหัสที่เป็นแบบแพลตฟอร์มสมบูรณ์ (เช่น อัลกอริทึมในการเรียงลําดับทั่วไป) รวมกันทุกที่ ส่วนอีกรูปแบบหนึ่งนั้น รหัสที่ควบคุมการลงทะเบียนฮาร์ดแวร์นั้นไม่สามารถใช้ได้โดยโดยตรง เป้าหมายของ CPOT คือแยกรายละเอียดที่ไม่สามารถจัดการได้ภายในชั้นที่เป็นนามธรรมเพื่อให้หลักของธุรกิจและอัลกอริทึมยังคงสามารถใช้งานได้
ปัญหา ทั่ว ไป ใน การ จํา รหัส
โรคระบาดระดับความแตกต่างกันต่ําจํานวนมาก ฝังค่า C sportable:
- [FLT: 0] ) สถาปัตยกรรมเก่าบางแบบ (Eg.flizedianness) เป็นตัวชี้ทางโดยตรงหรือสหภาพข้ามผ่านด้วยคําสั่ง นําไปสู่การทุจริตข้อมูลแบบเงียบ ๆ
- [FLT: 0] ขนาดและนิยามประเภท an [FLT: 0] อาจมี 16 บิตบน 8/0 บิต AVR, 32 บิตบนคอร์เท็กซ์ซ็ และ 64 บิตบน ISHCV 64 บิต โพรเซสบิต รหัสที่สมมุติว่า เป็น 32 บิตพอดี
- [FLT: 0] ความแตกต่างของแผนที่ แม้จะเป็น MCUs สองจากผู้ผลิตรายเดียวกัน มักจะมีที่อยู่พื้นฐานต่าง ๆ กัน, บิตฟิลด์ และลําดับการจัดอันดับ
- [FLT: 0] ส่วนขยายคอมพิวเลอร์และปัทมาส์ [FLT: 1) GCC] ICC, AR, ARM Commiler 6, และคีลแต่ละคนมีไวยากรณ์ของตัวเอง และในภาษาท้องถิ่นในบรรทัดที่ประกอบกัน
- [FLT: 0]] ผังและการจัดตําแหน่ง [[FLT: 1) บางแพลตฟอร์มต้องการการจัดตําแหน่งอย่างเข้มงวด สําหรับเข้าถึง 32/0 บิต; อื่น ๆ จัดการการเข้าถึงที่ผิดพลาดโดยมีผู้ดูแลความผิดพลาด
- [FLT: 0] การจัดการและการใช้กอง (FLT:1) วงจรการรบกวน, รุ่นสําคัญ, และพฤติกรรมการวางรังมีความหลากหลาย
กลยุทธ์ สําคัญ ใน การ เขียน รหัส C
เลเยอร์ถัดไป
เครื่องมือที่ทรงพลังที่สุดในคลังข้อมูลแบบพกพาแบบพกพา (FLT: 0) เป็นอุปกรณ์เวลา [FLT] ชั้นนามธรรม (FLT: 1) เครื่องราชอิสริยาภรณ์ที่ออกแบบมานั้น เปิดตัว HAL เปิดตัวรูปแบบ API สําหรับ PRI ทั่วไป (GIO, URT, PATI, PATI) ในขณะที่ซ่อนส่วนเชื่อมโยงลับของเครื่อง หน่วยความจํา ควรนิยามในส่วนหัว (E.FT: [3] ent: [F] entrography [F] language] languages [F]. languages languages languages (Forcument).
รูปแบบวิธีการ 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);
Plantriphy file (e.g. [FLT: 7]] มีหน่วยความจําลงทะเบียนจริง ๆ เมื่อย้ายไปเป็น MCU ใหม่ แหล่งที่มาระดับต่ําเท่านั้นต้องการการเขียนซ้ํา ในขณะที่ชั้นที่สูงกว่านี้ทั้งหมดยังคงไม่สามารถแตะต้องได้
การรับค่ามาตรฐาน
ไลบรารีมาตรฐาน C เป็นหลักสําหรับปฏิบัติการทั่วไปหลายอย่าง หน้าที่ของงานเช่น [FLT: 8] [FLT: ] [FLT: 9], [FLT: 9], สตริงได, และฟังก์ชันคณิตศาสตร์ใช้ได้บนระบบ CPELE ที่สอดคล้องกับระบบ CPECT การหลีกเลี่ยงสมมติฐานเกี่ยวกับภายในห้องสมุดนั้นมีความสําคัญมาก -- ไม่มีการเขียน [FLT: 10] ใหม่สําหรับประสิทธิภาพ จนกว่าคุณจะตรวจสอบแล้วว่า การใช้โปรแกรมของผู้ประสานงานของคุณไม่เพียงพอ
สําหรับระบบ IOT ที่มีหน่วยความจําจํากัด ให้พิจารณาใช้สับเซตของไลบรารีมาตรฐาน (FLT: 0) Newbabno (FLT: 1) ในระบบนิเวศของ GCCT (FL) แทนการม้วนรูปแบบสตริงของคุณเอง เช่นเดียวกัน [FLT: 11] Croups (FLT: 12) และ[FLT: 12] มีให้ใช้สากล ลิฟินาโน (FLTIV) Art Resordy [FLULT) เป็นโครง คุณสามารถช่วยวิกิพีเดียได้โดยมีความปลอดภัยได้มากเมื่อมีการใช้งาน
ใช้ชนิดข้อมูลแบบความกว้างคงที่
ใช้ประเภทจาก [FLT: 13] เสมอ และ เพื่อประกาศตัวแปรจํานวนเต็มที่มีความกว้างชัดเจน: [FLT: 17]] [FLT: 17]]] [FTTT: 18]; หลีกเลี่ยงการแยกตัวแปรแบบธรรมดา [FLT: 19] [FLT: 20] หรือ[FT] สําหรับสิ่งที่รู้ขนาดและขนาดตัวย่อของวงก๊ก และขนาดตัวย่อของวงเล็ก (FTL: 22) [T] [T] ใช้ตัวย่อ [TL: 17] ] ] หลีกเลี่ยงการกําจัด (FTTTL: 23].
เมื่อคุณต้องการที่จะสร้างข้อมูลข้ามเส้นทางขนส่งโดยผ่าน transfers, ผนวกประเภทคงที่ diversity กับฟังก์ชันการแปลงแบบตรง (FTT: 24) [FLT: 25] หรือแบบพกพาของพวกเขา) อย่าโยน ให้ [FLT: 27] และส่งมันผ่านเครือข่าย -- Endments จะกัดคุณ
การชดเชยเงื่อนไข
คําสั่งของพรีโปรเซสเตอร์เป็นเครื่องมือที่เหมาะสมสําหรับ square configive แต่ต้องถูกใช้อย่างมีระเบียบ ความหมายคือ Cruxs ในส่วนหัวตรงกลางเดียว (เช่น [FT: 28] แทนการกระจาย ผ่านทุกแฟ้ม ตัวอย่าง:
// platform_config.h
#if defined(STM32L4)
#define PLATFORM_STM32L4
#elif defined(EFM32GG)
#define PLATFORM_EFM32GG
#else
#error "Unsupported platform"
#endif
จาก นั้น ก็ ใช้ รหัส โดย ทั่ว ไป [FLT: 31] เฉพาะ เมื่อ จําเป็น อย่าง ยิ่ง เท่า นั้น โปรด จํา ไว้ ว่า การ อ่าน มาก เกิน ไป ทํา ให้ อ่าน รหัส และ คงทน.
ย่อเล็กสุดเมื่อขึ้นอยู่กับภายนอก
ทุกห้องสมุดที่สามที่คุณรวมคือ อันตรายที่อาจเกิดขึ้นก่อนการเชื่อมโยงไปยังอุปกรณ์ตรวจสอบว่า ห้องสมุดนี้รองรับสถาปัตยกรรมเป้าหมายทั้งหมดของคุณ และไม่ได้ดึงข้อสันนิษฐานที่ไม่สามารถใช้ได้ ตัวกรองที่ถูกเขียนใน C (เช่น [FLT: 0] FATS (FT: 1) หรือ[FLT: 2] FTS [FLTT: 3] จะปลอดภัยกว่าการพึ่งพาในเว็บไซต์ย่อยหรือภาษา Propas Praphmas แล้วพิจารณารวมเข้ากับไลบรารีของคุณเองเพื่อสลับตัวกับโปรแกรมอื่น ๆ
ลิ้งค์: [FLT: 0]. บทความเกี่ยวกับ translation Sublic C c c c ass เสนอมุมมองเพิ่มเติมเกี่ยวกับการจัดการการขึ้นต่อกันของระบบ
ข้อ แนะ ที่ ใช้ ได้ จริง เพื่อ การ ยืน หยัด
เขียนรหัสตัวอักษร
การแบ่งตัวของเครื่องของคุณเป็นโมดูลอิสระ โดยมีส่วนเชื่อมต่อที่นิยามได้อย่างดี แต่ละโมดูลควรจะเปิดเผยความสามารถของมันผ่านแฟ้มส่วนหัว และซ่อนรายละเอียดภายในของโปรแกรม ตัวเลือกนี้จะทําให้การแยกใช้งานโมดูลนี้ง่ายต่อการเปลี่ยนโมดูลด้วยเครื่องมือพกพา เมื่อพอร์ตไปยังแพลตฟอร์มใหม่ ตัวอย่างเช่น มอดูลควบคุมมอเตอร์ ควรพูดคุยกับ HAL สําหรับ PWM ซึ่งไม่ใช่โดยตรงในการล็อกอินแบบเวลา
ข้อกําหนดของเอกสาร
อย่างชัดเจน ข้อสังเกตใด ๆ ที่สันนิษฐานพฤติกรรมของฮาร์ดแวร์โดยเฉพาะ ใช้คําอธิบายว่าทําไมวิธีการไม่ส่งออก จึงสามารถเลือกได้ สิ่งที่มันทํางานบนแพลตฟอร์ม และสิ่งที่จะต้องเปลี่ยนแปลงสําหรับเป้าหมายอื่น เอกสารนี้ประเมินค่าไม่ได้เมื่อนักพัฒนาดั้งเดิมไม่มี และวิศวกรใหม่ต้องพอร์ตรหัส
ใช้เครื่องมือสร้างครอสฟลาทฟอร์ม
สร้างระบบอย่างเช่น [FLT: 0] Cggook หรือ Meson สามารถจัดการการตั้งค่าเป้าหมายได้หลายแบบจากโครงสร้างโครงการหนึ่งตัว CGG, ตัวอย่างเช่น อนุญาตให้คุณระบุเครื่องมือต่าง ๆ ของแต่ละแพลตฟอร์ม และตั้งค่าการถอดความชอบของโครงการที่ต้องใช้สําหรับการรักษาแฟ้มส่วนตัวสําหรับ I, KAR, และ GCCC: [FT4[FFL] pprofile[FTLLL] จัดทําตัวอย่างการข้ามมิติ.
ใช้เทคนิคการขยายเสียงแบบบิต/Manpeople ได้
เมื่อตั้งค่าหรือล้างบิตในหน่วยความจําเรจิสเตอร์ ให้หลีกเลี่ยงการเขียนหน้ากากสัมบูรณ์ที่สมมุติสถานที่แสดงบนสนาม
#define BIT_SET(reg, bit) ((reg) |= (1u << (bit)))
#define BIT_CLEAR(reg, bit) ((reg) &= ~(1u << (bit)))
กําหนด[FLT: 34] เป็นพารามิเตอร์นามธรรมแทนจํานวนเต็มโดยแท้ วิธีนี้ถ้าตําแหน่งบิตมีการเปลี่ยนแปลงใน MCU ที่แตกต่างกัน มีแค่นิยามค่าคงที่เท่านั้นจะต้องมีการเปลี่ยนแปลง ไม่ใช่การใช้งานตลอดโค๊ดเบส
ไดเรกทอรีและการตรวจสอบ
การอ้างสิทธิ์ต้องได้รับการยืนยัน ใช้การทํางานร่วมกับ (CI) อย่างต่อเนื่อง ซึ่งสร้างโครงการของคุณสําหรับทุกแพลตฟอร์มที่รองรับ ใน CI ให้เรียกใช้เครื่องมือวิเคราะห์แบบคงที่ เช่น [FLT: 0] PCLT[FLT: 1] หรือ Cover [FLT: 3] เพื่อตรวจสอบโครงสร้างที่ไม่สามารถใช้ได้ สําหรับการทดสอบระบบคอมพิวเตอร์สําหรับอุปกรณ์คอมพิวเตอร์ที่ใช้ร่วมกัน เช่น ISP (EGRMP) สําหรับ aminCVFOWE หรือ pril Facting to cript (Facter) โดยไม่ติดตั้งฮาร์ดแวร์ เมื่อมีอุปกรณ์ใช้งานอยู่: 2 Netwardics (FT: 2). configeral Profiles (F). actotech).
การ ทดสอบ ความ ถดถอย ควร ใช้ เกรด APIS ทุก ตัว บน เวที เพื่อ รับ ความ ไม่ สมดุล ก่อน.
รูปแบบการวน
การเขียนรหัส C แบบพกพาสําหรับอุปกรณ์ ไอโอที ไม่ใช่การคิดตามแบบว่าง -- มันเป็นวินัยที่ต้องใช้ในสถาปัตยกรรมตั้งแต่วันแรก โดยการลงทุนในชั้นของฮาร์ดแวร์, การยึดติดเข้ากับชนิดมาตรฐานและห้องสมุด โดยใช้เงื่อนไขที่คํานวณได้อย่างประหยัด และการทดสอบผ่านเป้าหมายอย่างรัดกุม คุณสามารถสร้างเครื่องสร้าง มั่นคงที่สามารถอยู่รอดได้กับการเปลี่ยนแปลงที่หลีกเลี่ยงไม่ได้ในภูมิทัศน์ การปรับปรุงหน้าได้ง่ายขึ้นในการบํารุงรักษา, การพอร์ตใหม่ของเซเลี่ยม, และมากขึ้น เพื่อใช้กลยุทธ์เหล่านี้เพื่อใช้ในในอนาคตที่ป้องกันโครงการ C.