มีการตั้งค่าและลูปเพื่อความสะดวกหรือไม่


13

Arduino ภาพร่างมักจะมีคุณสมบัติsetupและloopฟังก์ชั่น ฟังก์ชั่นเหล่านี้มีไว้เพื่อความสะดวกเท่านั้นหรือมีวัตถุประสงค์พิเศษจริง ๆ หรือไม่? (เช่น: เป็นการดำเนินการบางอย่างที่ไม่อนุญาตหรืออนุญาตในการตั้งค่าและลูป)

โค้ดสองชิ้นนี้เทียบเท่าหรือไม่:

คลาสสิก

void setup() {
    pinMode(LED_BUILTIN, OUTPUT);
}

void loop() {
    digitalWrite(LED_BUILTIN, HIGH);
    delay(1000);
    digitalWrite(LED_BUILTIN, LOW);
    delay(1000);
}

ไม่มีลูป

void setup() {
    pinMode(LED_BUILTIN, OUTPUT);

    while(true) {
        digitalWrite(LED_BUILTIN, HIGH);
        delay(1000);
        digitalWrite(LED_BUILTIN, LOW);
        delay(1000);
    }
}


void loop() {
}

เป็นไปได้หรือไม่ที่จะเขียนโค้ดโดยไม่ต้องตั้งค่าหรือวนรอบตัวอย่างเช่นmainวิธีการหรือจุดเข้าใช้งานอื่น ๆ

คำตอบ:


10

รหัสเหล่านั้นค่อนข้างเหมือนกัน

ถ้าคุณดูซอร์สโค้ดของ Arduinoคุณจะเห็น:

setup();

for (;;) {
  loop();
  if (serialEventRun) serialEventRun();
}

(ฉันไม่แน่ใจว่าserialEventRun()ทำอะไร)

ฉันไม่คิดว่าคุณสามารถ 'เกิน' การmainประกาศฟังก์ชั่น นอกจากนี้โปรดทราบว่าการเรียกฟังก์ชั่นหลักinitซึ่งเช่นกำหนดค่าตัวจับเวลาmillis()เป็นต้นจะทำงานได้


9

ฟังก์ชั่นเหล่านี้มีไว้เพื่อความสะดวกเท่านั้นหรือมีวัตถุประสงค์พิเศษจริง ๆ หรือไม่?

ห้องสมุด Arduino ทำบิตเล็ก ๆ ของการดูแลห้องพักด้วยloop()ที่เกี่ยวข้องกับการจัดการแบบอนุกรม

โค้ดสองชิ้นนี้เทียบเท่าหรือไม่:

เฉพาะในกรณีที่คุณไม่เคยใช้เหตุการณ์อนุกรม

เป็นไปได้หรือไม่ที่จะเขียนโค้ดโดยไม่ต้องตั้งค่าหรือวนรอบตัวอย่างเช่นวิธีหลักหรือจุดเข้าใช้งานอื่น ๆ

ไม่ในขณะที่ใช้ไลบรารี Arduino ผ่าน IDE อย่างเคร่งครัด ตัวเชื่อมโยงจะบ่นถึงmainคำจำกัดความที่ซ้ำกันหรือการขาดหายไปsetupหรือloopคำจำกัดความ


2

เป็นไปได้หรือไม่ที่จะเขียนโค้ดโดยไม่ต้องตั้งค่าหรือวนรอบตัวอย่างเช่นวิธีหลักหรือจุดเข้าใช้งานอื่น ๆ

ครั้งสุดท้ายที่ฉันใช้ IDE คุณสามารถมีโครงการที่ไม่มี.ino/ .pdeไฟล์ได้เฉพาะ.cppไฟล์เท่านั้น ตั้งแต่มัน mangling ของ.inoเป็น.cppที่กำหนดฟังก์ชั่นถ้าคุณข้ามขั้นตอนนั้นแล้วคุณสามารถกำหนดของคุณเองmainmain

ถ้า IDE ไม่อนุญาตสิ่งนี้ (อย่างที่ฉันเคยได้ยิน) คุณยังสามารถทำสิ่งเดียวกันกับเช่นการสร้างที่อิงกับ Makefile นอก IDE โดยไม่ต้องเลิกใช้ไลบรารี Arduino คำเตือนที่ฉันรู้คือ:

  • คุณควร#include "Arduino.h"ถ้าคุณต้องการเข้าถึงฟังก์ชั่นห้องสมุด
  • คุณควรโทรinit()หากคุณต้องการให้ห้องสมุดตั้งค่าอุปกรณ์ต่อพ่วงตามที่คุณคุ้นเคย
  • คุณควรใส่serialEventรหัสที่ Gerben ชี้ให้เห็นใน mainloop ของคุณหากคุณต้องการให้serialEventhandler รัน (แต่คุณอาจไม่ต้องการสิ่งนี้หากคุณต้องการเขียน mainloop ของคุณเอง)

1

Arduino ภาพร่างมักจะมีฟังก์ชั่นการตั้งค่าและวน ฟังก์ชั่นเหล่านี้มีไว้เพื่อความสะดวกเท่านั้นหรือมีวัตถุประสงค์พิเศษจริง ๆ หรือไม่?

พวกเขาโยนในการเรียกใช้ฟังก์ชันพิเศษในการinitที่จะเริ่มต้นจับเวลาที่ให้millis, microsและdelayการทำงานโดยไม่ต้องพยายามต่อไป นอกเหนือจากนั้นไม่มี

รหัสนี้จะคอมไพล์ (และรัน) ภายใต้ IDE:

int main ()
  {
  }

IDE สร้างโค้ดดังนี้:

int main ()
  {
  init ();  // set up timers
  setup (); // your own initialization
  while (true)
    loop ();  // stuff you want to keep doing
  }

พวกเขาเล่นกับมันตั้งแต่นั้นมาอย่างที่ Ignacio Vazquez-Abrams พูด แต่โดยพื้นฐานแล้วคุณสามารถเพิกเฉยได้ โดยเฉพาะอย่างยิ่งไม่มีอะไรพิเศษเกี่ยวกับการเป็นและsetuploop

คุณสามารถใช้mainเหมือนที่ฉันแสดงข้างต้น คุณสามารถทำทุกอย่างได้setupถ้าต้องการ คุณสามารถทำทุกอย่างได้loopถ้าคุณต้องการ (ถ้าคุณไม่กลับมาจากมัน)

จำไว้ว่าคุณกำลังติดต่อกับคอมไพเลอร์ C ++ ที่นี่ ฟังก์ชั่นไม่ได้มีความสำคัญเวทมนต์ตามชื่อของพวกเขา

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.