Recent Posts

Pages: [1] 2 3 ... 10
1
ARM Processors / Re: FreeRTOS
« Last post by tha on Today at 06:05:47 am »
พารามิเตอร์การกำหนดค่าเหล่านี้ช่วยให้การจัดการอินเตอร์รัปต์มีความยืดหยุ่นมาก:

     •  Interrupt handling 'tasks' สามารถถูกเขียนและจัดลำดับความสำคัญตาม task อื่นใดๆใน the system. มี tasks ที่ถูกปลุกโดย an interrupt. The
         interrupt service routine (ISR) มันเองควรถูกเขียนให้สั้นที่สุดเท่าที่มันสามารถเป็นได้ - มันเพียงแค่จับ the data จากนั้นปลุก the high priority handler
         task. The ISR จากนั้นรีเทิร์นโดยตรงลงใน the woken handler task - ดังนั้น interrupt processing จะต่อเนื่องทันเวลา ราวกับว่ามันทำทั้งหมดใน the ISR
         ของตัวเอง. ประโยชน์ของสิ่งนี้คือ interrupts ทั้งหมดยังคงเปิดใช้งานในขณะที่ the handler task ดำเนินการ

     •  Ports ที่จัดให้มีใช้ configMAX_SYSCALL_INTERRUPT_PRIORITY จะก้าวต่อไป - ยอมให้ a fully nested model ที่ interrupts ระหว่าง the RTOS
         kernel interrupt priority and configMAX_SYSCALL_INTERRUPT_PRIORITY สามารถซ้อนกันและทำการเรียก applicable API. Interrupts ที่มี
         priority เหนือ configMAX_SYSCALL_INTERRUPT_PRIORITY ไม่เคยถูกหน่วงเวลาโดย the RTOS kernel activity.

     •  ISR ที่ทำงานอยู่เหนือ the maximum syscall priority จะไม่เคยถูกปิดบังโดย the RTOS kernel ตัวเอง, ดังนั้นการตอบสนองของพวกมันจะไม่ถูกกระทบโดย
         the RTOS kernel functionality. นี้คือแนวคิดสำหรับ interrupts ที่ต้องการ very high temporal accuracy - ตัวอย่างเช่่น interrupts ที่กระทำา motor
         commutation. อย่างไรก็ตาม ISR ดังกล่าวไม่สามารถใช้ the FreeRTOS API functions.
2
ARM Processors / Re: FreeRTOS
« Last post by tha on October 26, 2021, 06:23:55 am »
A full interrupt nesting model ถูกทำให้สำเร็จโดยการเซ็ต configMAX_SYSCALL_INTERRUPT_PRIORITY เหนือ (นั่นคือ, ที่ a higher priority level) กว่า configKERNEL_INTERRUPT_PRIORITY. นี้หมายความว่า the FreeRTOS kernel ไม่ปิดการใช้งาน interrupts อย่างสมบูรณ์, แม้ภายใน critical sections. นอกจากนี้, นี้ถูกทำให้สำเร็จโดยไม่มีข้อเสียของ a segmented kernel architecture. อย่างไรก็ตาม โปรดทราบว่า, certain microcontroller architectures จะ (ใน hardware) ปิดการใช้งาน interrupts เมื่อ a new interrupt ถูกยอมรับ - หมายความว่า interrupts ถูกปิดใช้งานอย่างหลีกเลี่ยงไม่ได้ในช่วงเวลาสั้น ๆ ระหว่าง the hardware ยอมรับ the interrupt, และ the FreeRTOS code จะเปิดการใช้งาน interrupts ใหม่.

Interrupts ที่ไม่เรียก API functions สามารถปฏิบัติที่ priorities เหนือ configMAX_SYSCALL_INTERRUPT_PRIORITY และดังนั้นไม่เคยถูกหน่วงเวลาโดย the RTOS kernel execution

ตัวอย่างเช่น ลองนึกภาพ a hypothetical microcontroller ที่มี 8 interrupt priority levels - 0 เป็น the lowest and 7 เป็น the highest (ดู the special note สำหรับ ARM Cortex-M3 users ในตอนท้ายของส่วนนี้). รูปภาพข้างล่างอธิบายอะไรสามารถและไม่สามารถถูกทำที่แต่ละ priority level หาก the two configuration constants ถูกเซ็ตเป็น 4 and 0 ดังแสดง:

                   
3
ARM Processors / Re: FreeRTOS
« Last post by tha on October 26, 2021, 05:43:13 am »
สำหรับ ports ที่จัดให้มีใช้เฉพาะ configKERNEL_INTERRUPT_PRIORITY
configKERNEL_INTERRUPT_PRIORITY เซ็ต the interrupt priority ที่ใช้โดย the RTOS kernel ของมันเอง. Interrupts ที่เรียก API functions ต้องปฏิบัติที่ priority นี้อีกด้วย. Interrupts ที่ไม่เรียก API functions สามารถปฏิบัติที่ higher priorities และดังนั้นไม่เคยมีการปฏิบัติของพวกมันถูกหน่วงเวลาโดย the RTOS kernel activity ภายในข้อจำกัดของ the hardware มันเอง).

สำหรับ ports ที่จัดให้มีใช้ทั้ง configKERNEL_INTERRUPT_PRIORITY and configMAX_SYSCALL_INTERRUPT_PRIORITY:
configKERNEL_INTERRUPT_PRIORITY เซ็ต the interrupt priority ที่ใช้โดย the RTOS kernel ของมันเอง.. configMAX_SYSCALL_INTERRUPT_PRIORITY เซ็ต the highest interrupt priority จากซึ่ง interrupt safe FreeRTOS API functions สามารถถูกเรียก.
4
ARM Processors / Re: FreeRTOS
« Last post by tha on October 26, 2021, 05:26:49 am »
configKERNEL_INTERRUPT_PRIORITY
configMAX_SYSCALL_INTERRUPT_PRIORITY and
configMAX_API_CALL_INTERRUPT_PRIORITY


Ports ที่บรรจุ a configKERNEL_INTERRUPT_PRIORITY ตั้งค่า include ARM Cortex-M3, PIC24, dsPIC, PIC32, SuperH and RX600. Ports ที่บรรจุ a configMAX_SYSCALL_INTERRUPT_PRIORITY ตั้งค่า include PIC32, RX600, ARM Cortex-A and ARM Cortex-M ports.

ARM Cortex-M3 and ARM Cortex-M4 ผู้ใช้โปรดใช้หมายเหตุพิเศษในตอนท้ายของส่วนนี้!

configMAX_API_CALL_INTERRUPT_PRIORITY เป็นชื่อใหม่สำหรับ configMAX_SYSCALL_INTERRUPT_PRIORITY ที่ถูกใช้โดยพอร์ตที่ใหม่กว่าเท่านั้น ทั้งสองมีค่าเท่ากัน.

configKERNEL_INTERRUPT_PRIORITY ควรถูกเซ็ตไปยัง the lowest priority.

หมายเหตุในการสนทนาต่อไปนี้ที่เฉพาะ API functions ที่สิ้นสุดใน "FromISR" เท่านั้นสามารถถูกเรียกจากภายใน an interrupt service routine
5
ARM Processors / Re: FreeRTOS
« Last post by tha on October 25, 2021, 04:39:49 pm »
configUSE_TIMERS

เซ็ตเป็น 1 เพื่อรวม software timer functionality, หรือ 0 เพื่อละเว้น software timer functionality. ดู the FreeRTOS software timers page สำหรับการอธิบายเติม.

configTIMER_TASK_PRIORITY

เซ็ต the priority of the software timer service/daemon task. ดู the FreeRTOS software timers page สำหรับการอธิบายเติม.

configTIMER_QUEUE_LENGTH

เซ็ตความยาวของ the software timer command queue. ดู the FreeRTOS software timers page สำหรับการอธิบายเติม.

configTIMER_TASK_STACK_DEPTH

เซ็ต the stack depth ที่จัดสรรให้กับ the software timer service/daemon task. ดู the FreeRTOS software timers page สำหรับการอธิบายเติม.
6
ARM Processors / Re: FreeRTOS
« Last post by tha on October 25, 2021, 04:32:45 pm »
configGENERATE_RUN_TIME_STATS

The Run Time Stats page อธิบายการใช้ของ parameter นี้.

configUSE_CO_ROUTINES

เซ็ตเป็น 1 เพื่อรวม co-routine functionality ใน the build, หรือ 0 เพื่อละเว้น co-routine functionality จาก the build. เพื่อรวม co-routines croutine.c ต้องถูกรวมใน the project.

configMAX_CO_ROUTINE_PRIORITIES

จำนวนของ priorities ที่มีให้ใช้ประโยชน์กับ the application co-routines. จำนวนเท่าใดก็ได้ของ co-routines สามารถแชร์ the same priority. Tasks ถูกจัดลำดับความสำคัญแยกต่างกัน - ดู configMAX_PRIORITIES.
7
ARM Processors / Re: FreeRTOS
« Last post by tha on October 25, 2021, 04:21:02 pm »
configSTACK_ALLOCATION_FROM_SEPARATE_HEAP

ถ้า configSTACK_ALLOCATION_FROM_SEPARATE_HEAP ถูกเซ็ตเป็น 1 ดังนั้น stack สำหรับ task ใดๆที่สร้างโดยใช้ xTaskCreate or xTaskCreateRestricted API ถูกจัดสรรโดยใช้ pvPortMallocStack และปล่อยฟรีโดยใช้ vPortFreeStack function. The user จำเป็นต้องจัดให้มี thread-safe implementations of pvPortMallocStack and vPortFreeStack functions. นี้ทำให้ the user จัดสรร stacks สำหรับ tasks จาก a separate region of memory (อาจเป็น heap อื่นที่แตกต่างจาก the FreeRTOS heap).

ถ้า configSTACK_ALLOCATION_FROM_SEPARATE_HEAP ถูกทิ้งไว้ไม่กำหนดมันจะมีค่าเริ่มต้นเป็น 0.

ตัวอย่าง implementation of pvPortMallocStack and vPortFreeStack functions คือข้างล่าง :

8
ARM Processors / Re: FreeRTOS
« Last post by tha on October 25, 2021, 01:36:18 pm »
configAPPLICATION_ALLOCATED_HEAP

โดยค่าเริ่มต้น the FreeRTOS heap ถูกประกาศโดย FreeRTOS และถูกวางใน memory โดย the linker. การเซ็ต configAPPLICATION_ALLOCATED_HEAP เป็น 1 ยอมให้ the heap ถูกประกาศแทนโดย the application writer, ซึ่งยอมให้ the application writer วาง the heap ที่ไหนก็ได้ที่พวกมันชอบใน memory.

ถ้า heap_1.c, heap_2.c or heap_4.c ถูกใช้, และ configAPPLICATION_ALLOCATED_HEAP ถูกเซ็ตเป็น 1, ดังนั้น the application writer ต้องจัดให้มี a uint8_t array ที่มี the exact name and dimension ดังแสดงข้างล่าง. The array จะถูกใช้เป็น the FreeRTOS heap. วิธีที่ the array ถูกวางที่ a specific memory location ขึ้นอยู่กับ on the compiler ที่กำลังถูกใช้ - โปรดดู your compiler's documentation.

uint8_t ucHeap[ configTOTAL_HEAP_SIZE ];
9
ARM Processors / Re: FreeRTOS
« Last post by tha on October 25, 2021, 12:07:52 pm »
configTOTAL_HEAP_SIZE

The total amount of RAM มีให้ใช้ประโยชน์ใน the FreeRTOS heap.

ค่านี้จะถูกใช้เฉพาะถ้า configSUPPORT_DYNAMIC_ALLOCATION ถูกเซ็ตเป็น 1 และ the application ทำการใช้ของหนึ่งของ the sample memory allocation schemes ที่จัดให้มีใน the FreeRTOS source code download. ดู the memory configuration section สำหรับรายละเอียดที่มากขึ้น.
10
ARM Processors / Re: FreeRTOS
« Last post by tha on October 25, 2021, 12:02:01 pm »
configSUPPORT_DYNAMIC_ALLOCATION

ถ้า configSUPPORT_DYNAMIC_ALLOCATION ถูกเซ็ตเป็น 1 ดังนั้น RTOS objects สามารถถูกสร้างโดยใช้ RAM ที่ถูกจัดสรรโดยอัตโนมัติจาก the FreeRTOS heap.

ถ้า configSUPPORT_DYNAMIC_ALLOCATION ถูกเซ็ตเป็น 1 ดังนั้น RTOS objects สามารถถูกสร้างโดยใช้ RAM ที่จัดให้มีโดย the application writer เท่านั้น.

ถ้า configSUPPORT_DYNAMIC_ALLOCATION ถูกทิ้งไว้ไม่กำหนดมันจะมีค่าเริ่มต้นเป็น 1.

ดู the Static Vs Dynamic Memory Allocation page สำหรับข้อมูลเพิ่มเติม.
Pages: [1] 2 3 ... 10