FreeRTOS API Reference

Started by tha, December 07, 2021, 06:05:54 AM

Previous topic - Next topic

tha

     •  xRegions

        xRegions เป็น an array of MemoryRegion_t structures, แต่ละส่วนจะกำหนด a single user definable memory region สำหรับใช้โดย the task ที่
        กำลังถูกสร้าง. The ARM Cortex-M3 FreeRTOS-MPU port กำหนด portNUM_CONFIGURABLE_REGIONS ให้เป็น 3.

        The pvBaseAddress and ulLengthInBytes members อธิบายตัวเองว่าเป็นจุดเริ่มต้นของ the memory region และความยาวของ the memory region
        ตามลำดับ. ulParameters กำหนดวิธีที่ the task ถูกยอมให้เข้าถึง the memory region และสามารถใช้ the bitwise OR ของค่าต่อไปนี้:



     •  pxTaskBuffer

        ต้องชี้ไปยังตัวแปรของชนิด StaticTask_t. The variable จะถูกใช้เพื่อเก็บ the new task's data structures, ดังนั้นมันต้องคงอยู่ (ไม่ถูกประกาศบน the
        stack of a function).



tha

https://www.freertos.org/a00126.html



INCLUDE_vTaskDelete ต้องถูกกำหนดเป็น 1 สำหรับฟังชั่นนี้มีใช้ให้ประโยชน์. ดู the RTOS Configuration documentation สำหรับข้อมูลเพิ่มเติม.

ลบ a task ออกจาก the RTOS kernels management. The task ที่กำลังถูกลบจะถูกเอาออกจาก ready, blocked, suspended and event lists ทั้งหมด.

NOTE: The idle task จะรับผิดชอบสำหรับการปล่อยฟรี the RTOS kernel allocated memory จาก tasks ที่ถูกลบแล้ว. ดังนั้นจึงเป็นเรื่องสำคัญที่ the idle task จะไม่อดอยาก microcontroller processing time ถ้า application ของคุณทำการเรียกใดๆไปยัง vTaskDelete (). Memory ที่จัดสรรโดย the task code จะไม่ถูกปล่อยฟรีโดยอัตโนมัติ, และควรถูกปล่อยฟรีก่อนที่ the task จะถูกลบ.

ดู the demo application file death. c สำหรับ code ตัวอย่างที่ใช้ประโยชน์ vTaskDelete ().

Parameters:

     xTask        The handle of the task ที่ถูกลบ. การส่งผ่าน NULL จะเป็นเหตุให้ the calling task ถูกลบ.


tha

https://www.freertos.org/a00127.html



INCLUDE_vTaskDelay ต้องถูกกำหนดเป็น 1 สำหรับฟังชั่นนี้มีใช้ให้ประโยชน์. ดู the RTOS Configuration documentation สำหรับข้อมูลเพิ่มเติม.

การหน่วงเวลา a task ตามจำนวนของ ticks ที่กำหนด. The actual time ที่ the task ยังคงถูกบล็อกอยู่ขึ้นอยู่กับ the tick rate. ค่าคงที่ portTICK_PERIOD_MS สามารถถูกใช้เพื่อคำนวณ real time จาก the tick rate - ด้วยความละเอียด one tick period.

vTaskDelay() ระบุเวลาที่ the task ต้องการปลดบล็อคโดยสัมพันธ์กับเวลาที่ vTaskDelay() ถูกเรียก. ตัวอย่างเช่น, การระบุ a block period of 100 ticks จะเป็นเหตุให้ the task ปลดบล็อกที่ 100 ticks หลังจาก vTaskDelay() ถูกเรียก. vTaskDelay() ดังนั้นไม่จัดให้มีวิธีการที่ดีของการควบคุมความถี่ของ a periodic task เนื่องจากเส้นทางที่ผ่าน the code, เช่นเดียวกันกับ task อื่นและ interrupt activity, จะส่งผลต่อความถี่ที่ vTaskDelay() ถูกเรียกและเวลาที่ the task จะปฏิบัติต่อไป. ดู vTaskDelayUntil() สำหรับฟังชั่น API อีกทางเลือกที่ออกแบบเพื่ออำนวยความสะดวก fixed frequency execution. มันทำสิ่งนี้โดยการระบุ an absolute time (แทนที่จะเป็น a relative time) ที่ the calling task ควรปลดบล็อก.

Parameters:

     xTicksToDelay       จำนวนของเวลา, เป็น tick periods, ที่ the calling task ควรบล็อก.



tha

https://www.freertos.org/vtaskdelayuntil.html



INCLUDE_vTaskDelayUntil ต้องถูกกำหนดเป็น 1 สำหรับฟังชั่นนี้มีใช้ให้ประโยชน์. ดู the RTOS Configuration documentation สำหรับข้อมูลเพิ่มเติม.

หน่วงเวลา a task จนกระทั่งถึงเวลาที่ระบุ. ฟังชั่นนี้สามารถถูกใช้โดย periodic tasks เพื่อให้แน่ใจว่า a constant execution frequency.

ฟังชั่นนี้แตกต่างจาก vTaskDelay() ในแง่มุมที่สำคัญประการหนึ่ง: vTaskDelay() ระบุเวลาที่ the task ต้องการปลดบล็อกโดยสัมพันธ์กับเวลาที่ vTaskDelay() ถูกเรียก, ในขณะที่ vTaskDelayUntil() ระบุ an absolute time ที่ task ต้องการปลดบล็อก.

vTaskDelay() จะเป็นเหตุให้ a task บล็อกเป็นจำนวน ticks ที่ระบุจากเวลาที่ vTaskDelay() ถูกเรียก. ดังนั้นจึงเป็นเรื่องยากที่จะใช้ vTaskDelay() ด้วยตัวเองเพื่อสร้าง a fixed execution frequency เนื่องจากเวลาระหว่าง a task ปลดบล็อกหลังจากการเรียก vTaskDelay() และ task นั้นที่เรียก vTaskDelay() ครั้งต่อไปอาจไม่คงที่ [the task อาจได้รับเส้นทางที่แตกต่างกันผ่านทาง the code ระหว่างการเรียก, หรืออาจได้รับ interrupted หรือยึดเอาไว้ก่อนในจำนวนเวลาที่แตกต่างกันแต่ละครั้งที่มันปฏิบัติ]

tha

ในขณะที่ vTaskDelay() ระบุ a wake time ที่สัมพันธ์กับเวลาที่ the function ถูกเรียก, vTaskDelayUntil() ระบุ the absolute (exact) time ที่มันต้องการปลดบล็อก.

ควรสังเกตว่า vTaskDelayUntil() จะรีเทิร์นทันที (โดยไม่มีการบล็อก) ถ้ามันถูกใช้ระบุ a wake time ที่ผ่านไปแล้ว. ดังนั้น a task ใช้ vTaskDelayUntil() ปฏิบัติเป็นระยะ(คาบเวลา)จะต้องคำนวณเวลาปลุกที่ต้องการใหม่ถ้า the periodic execution ถูกหยุดลงด้วยเหตุผลใดก็ตาม (ตัวอย่างเช่น, the task ถูกวางลงใน the Suspended state ชั่วคราว) เป็นเหตุให้ the task พลาดไปหนึ่งหรือมากกว่า periodic executions. นี้สามารถตรวจพบได้โดยการตรวจสอบตัวแปร passed by reference เป็น the pxPreviousWakeTime parameter เทียบกับ the current tick count. อย่างไรก็ตาม สิ่งนี้ไม่จำเป็นภายใต้สถานการณ์การใช้งานส่วนใหญ่.

tha

ค่าคงที่ portTICK_PERIOD_MS สามารถถูกใช้คำนวณ real time จาก the tick rate - ด้วยความละเอียด one tick period.

ฟังก์ชันนี้ต้องไม่ถูกเรียกในขณะที่ the RTOS scheduler ถูกระงับโดยการเรียก vTaskSuspendAll().

Parameters:

     pxPreviousWakeTime    ตัวชี้ไปยังตัวแปรที่เก็บเวลาที่ the task ถูกปลดบล็อกครั้งล่าสุด. ตัวแปรต้องเริ่มต้นด้วย the current time ก่อนการใช้งานครั้งแรก (ดู
                                               ตัวอย่างด้านล่าง) ต่อไปตัวแปรจะได้รับการอัพเดตโดยอัตโนมัติภายใน vTaskDelayUntil().

     xTimeIncrement            The cycle time period. The task จะถูกปลดบล็อกที่เวลา (*pxPreviousWakeTime + xTimeIncrement). การเรียก
                                               vTaskDelayUntil ด้วย the same xTimeIncrement parameter value จะเป็นเหตุให้ the task ปฏิบัติด้วย a fixed
                                               interval period.



tha

https://www.freertos.org/xtaskdelayuntiltask-control.html



INCLUDE_xTaskDelayUntil ต้องถูกกำหนดเป็น 1 สำหรับฟังชั่นนี้มีใช้ให้ประโยชน์. ดู the RTOS Configuration documentation สำหรับข้อมูลเพิ่มเติม.

หน่วงเวลา a task จนกระทั่งถึงเวลาที่ระบุ. ฟังชั่นนี้สามารถถูกใช้โดย periodic tasks เพื่อให้แน่ใจว่า a constant execution frequency.

ฟังชั่นนี้แตกต่างจาก vTaskDelay() ในแง่มุมที่สำคัญประการหนึ่ง: vTaskDelay() จะเป็นเหตุให้ a task บล็อกเป็นจำนวน ticks ที่ระบุจากเวลาที่ vTaskDelay() ถูกเรียก. ในขณะที่ xTaskDelayUntil() จะเป็นเหตุให้ a task บล็อกเป็นจำนวน ticks ที่ระบุจากเวลาที่ระบุใน the pxPreviousWakeTime parameter. ดังนั้นจึงเป็นเรื่องยากที่จะใช้ vTaskDelay() ด้วยตัวเองเพื่อสร้าง a fixed execution frequency เนื่องจากเวลาระหว่าง a task สตาร์ทปฏิบัติและ task นั้นเรียก vTaskDelay() อาจจะไม่คงที่ [the task อาจได้รับเส้นทางที่แตกต่างกันผ่านทาง the code ระหว่างการเรียก, หรืออาจได้รับ interrupted หรือยึดเอาไว้ก่อนในจำนวนเวลาที่แตกต่างกันแต่ละครั้งที่มันปฏิบัติ]. xTaskDelayUntil() สามารถถูกใช้เพื่อสร้าง a constant execution frequency.

tha

ในขณะที่ vTaskDelay() ระบุ a wake time ที่สัมพันธ์กับเวลาที่ the function ถูกเรียก, xTaskDelayUntil() ระบุ the absolute (exact) time ที่มันต้องการปลดบล็อก.

The macro pdMS_TO_TICKS() สามารถถูกใช้คำนวณจำนวน ticks จากเวลาที่ระบุเป็น milliseconds ด้วยความละเอียด one tick period.

Parameters:

     pxPreviousWakeTime    ตัวชี้ไปยังตัวแปรที่เก็บเวลาที่ the task ถูกปลดบล็อกครั้งล่าสุด. ตัวแปรต้องเริ่มต้นด้วย the current time ก่อนการใช้งานครั้งแรก (ดู
                                               ตัวอย่างด้านล่าง) ต่อไปตัวแปรจะได้รับการอัพเดตโดยอัตโนมัติภายใน xTaskDelayUntil().

     xTimeIncrement           The cycle time period. The task จะถูกปลดบล็อกที่เวลา (*pxPreviousWakeTime + xTimeIncrement). การเรียก
                                              xTaskDelayUntil ด้วย the same xTimeIncrement parameter value จะเป็นเหตุให้ the task ปฏิบัติด้วย a fixed
                                              interval period.

Returns:

     ค่าที่สามารถถูกใช้เพื่อตรวจสอบว่า the task ถูกหน่วงเวลาแล้วจริงหรือไม่: pdTRUE ถ้า the task ถูกหน่วงเวลาแล้วและ pdFALSE ถ้าเป็นอย่างอื่น. A task จะไม่ถูก
     หน่วงเวลาถ้า the next expected wake time ได้ผ่านไปแล้ว