Elektroda.pl
Elektroda.pl
X

Wyszukiwarki naszych partnerów

Wyszukaj w ofercie 200 tys. produktów TME
Europejski lider sprzedaży techniki i elektroniki.
Proszę, dodaj wyjątek elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

FreeRTOS - Eclipse - działanie vTaskDelay()

baracuda2 12 Cze 2014 22:40 1203 2
  • #1 12 Cze 2014 22:40
    baracuda2
    Poziom 13  

    Witam

    Mam zamiar napisać w FreeRTOS przykładowy program obrazujący działanie systemu RTOS (rózne reakcje programu na jakies dane wejściowe).

    Uruchomiłem przykład Demo win32-minGW w eclipsie, lecz że jest on rozbudowany, w pliku main zacząłem od przykładu z zadaniami i kolejką.

    Na podstawie przykładu z filmiku: Filmik FreeRTOS uruchomiłem program, lecz dziwi mnie działanie funkcji vTaskDelay(). Gdy dam np. watosć 200 - program wyswietla wartości jakby w paczkach i dużo szybciej niż w przykładzie.


    Główny plik main

    Code:

    /* Standard includes. */
    #include <stdio.h>

    /* Kernel includes. */
    #include "FreeRTOS.h"
    #include "task.h"
    #include "queue.h"


    xQueueHandle Global_Queue_Handle = 0;
    void sender_task(void *p)
    {
       int i=0;
       while(1)
       {
          printf("Send %i to recive task\n", i);
          if(! xQueueSend(Global_Queue_Handle, &i, 1000))
          {
             printf("Failed to send to queue\n");
          }
          ++i;
          vTaskDelay(200);
       }
    }
    void receiver_task(void *p)
    {
       int rx_int = 0;
       while(1)
       {
          if(xQueueReceive(Global_Queue_Handle, &rx_int, 1000))
          {
             printf("Received %i\n", rx_int);
          }
          else
          {
             puts("Failed to receive data from queue");
          }


       }
    }

    void zadanie(void *p)
    {
       while(1)
          {
             printf("eggg\n");
             vTaskDelay(20);
          }
    }
    /*-----------------------------------------------------------*/

    int main( void )
    {

       Global_Queue_Handle = xQueueCreate(3, sizeof(int));
       //xTaskCreate( sender_task, ( signed char * ) "tx", 2048, NULL, 1, NULL );
       //xTaskCreate( receiver_task, ( signed char * ) "rx", 2048, NULL, 1, NULL );




       xTaskCreate( zadanie, ( signed char * ) "zadanie", 1024, NULL, 1, NULL );
       /* Start the scheduler itself. */
       vTaskStartScheduler();

        return 0;
    }
    /*-----------------------------------------------------------*/


    freertosconfig.h
    Code:
    /*
    
        FreeRTOS V7.6.0 - Copyright (C) 2013 Real Time Engineers Ltd.
        All rights reserved

        VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.

        ***************************************************************************
         *                                                                       *
         *    FreeRTOS provides completely free yet professionally developed,    *
         *    robust, strictly quality controlled, supported, and cross          *
         *    platform software that has become a de facto standard.             *
         *                                                                       *
         *    Help yourself get started quickly and support the FreeRTOS         *
         *    project by purchasing a FreeRTOS tutorial book, reference          *
         *    manual, or both from: http://www.FreeRTOS.org/Documentation        *
         *                                                                       *
         *    Thank you!                                                         *
         *                                                                       *
        ***************************************************************************

        This file is part of the FreeRTOS distribution.

        FreeRTOS is free software; you can redistribute it and/or modify it under
        the terms of the GNU General Public License (version 2) as published by the
        Free Software Foundation >>!AND MODIFIED BY!<< the FreeRTOS exception.

        >>! NOTE: The modification to the GPL is included to allow you to distribute
        >>! a combined work that includes FreeRTOS without being obliged to provide
        >>! the source code for proprietary components outside of the FreeRTOS
        >>! kernel.

        FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY
        WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
        FOR A PARTICULAR PURPOSE.  Full license text is available from the following
        link: http://www.freertos.org/a00114.html

        1 tab == 4 spaces!

        ***************************************************************************
         *                                                                       *
         *    Having a problem?  Start by reading the FAQ "My application does   *
         *    not run, what could be wrong?"                                     *
         *                                                                       *
         *    http://www.FreeRTOS.org/FAQHelp.html                               *
         *                                                                       *
        ***************************************************************************

        http://www.FreeRTOS.org - Documentation, books, training, latest versions,
        license and Real Time Engineers Ltd. contact details.

        http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products,
        including FreeRTOS+Trace - an indispensable productivity tool, a DOS
        compatible FAT file system, and our tiny thread aware UDP/IP stack.

        http://www.OpenRTOS.com - Real Time Engineers ltd license FreeRTOS to High
        Integrity Systems to sell under the OpenRTOS brand.  Low cost OpenRTOS
        licenses offer ticketed support, indemnification and middleware.

        http://www.SafeRTOS.com - High Integrity Systems also provide a safety
        engineered and independently SIL3 certified version for use in safety and
        mission critical applications that require provable dependability.

        1 tab == 4 spaces!
    */


    #ifndef FREERTOS_CONFIG_H
    #define FREERTOS_CONFIG_H

    /*
     * The following #error directive is to remind users that a batch file must be
     * executed prior to this project being built.  The batch file *cannot* be
     * executed from within the IDE!  Once it has been executed, re-open or refresh
     * the Eclipse project and remove the #error line below.
     */


    /*-----------------------------------------------------------
     * Application specific definitions.
     *
     * These definitions should be adjusted for your particular hardware and
     * application requirements.
     *
     * THESE PARAMETERS ARE DESCRIBED WITHIN THE 'CONFIGURATION' SECTION OF THE
     * FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE.
     *----------------------------------------------------------*/

    #define configUSE_PREEMPTION         1
    #define configUSE_IDLE_HOOK            0
    #define configUSE_TICK_HOOK            0
    #define configTICK_RATE_HZ            ( 1000 ) /* Note true real time behaviour cannot be achieved in this simulated environment. */
    #define configMINIMAL_STACK_SIZE      ( ( unsigned portSHORT ) 20 ) /* In this simulated case, the stack only has to hold one small structure as the real stack is part of the win32 thread. */
    #define configTOTAL_HEAP_SIZE         ( ( size_t ) 0 ) /* This parameter has no effect when heap_3.c is included in the project. */
    #define configMAX_TASK_NAME_LEN         ( 12 )
    #define configUSE_TRACE_FACILITY      1
    #define configUSE_16_BIT_TICKS         0
    #define configIDLE_SHOULD_YIELD         1
    #define configUSE_CO_ROUTINES          0
    #define configUSE_MUTEXES            1
    #define configGENERATE_RUN_TIME_STATS   0
    #define configCHECK_FOR_STACK_OVERFLOW   0
    #define configUSE_RECURSIVE_MUTEXES      1
    #define configQUEUE_REGISTRY_SIZE      0
    #define configUSE_MALLOC_FAILED_HOOK   0
    #define configUSE_APPLICATION_TASK_TAG   0

    #define configMAX_PRIORITIES         ( ( unsigned portBASE_TYPE ) 7 )
    #define configMAX_CO_ROUTINE_PRIORITIES ( 2 )


    /* Co-routine definitions. */
    #define configUSE_CO_ROUTINES       0
    #define configMAX_CO_ROUTINE_PRIORITIES ( 2 )

    /* Set the following definitions to 1 to include the API function, or zero
    to exclude the API function. */

    #define INCLUDE_vTaskPrioritySet         1
    #define INCLUDE_uxTaskPriorityGet         1
    #define INCLUDE_vTaskDelete               1
    #define INCLUDE_vTaskCleanUpResources      0
    #define INCLUDE_vTaskSuspend            1
    #define INCLUDE_vTaskDelayUntil            1
    #define INCLUDE_vTaskDelay               1
    #define INCLUDE_uxTaskGetStackHighWaterMark   1
    #define INCLUDE_xTaskGetSchedulerState      1


    #endif /* FREERTOS_CONFIG_H */



    W załaczniku cały projekt dla eclipse.

    Co do uC to w tym projektcie nie uzywam, jak przeczytałem, na stronie freertos demo z mingw jest symulatorem tego systemu.

    0 2
  • #2 13 Cze 2014 10:14
    mi14chal
    Poziom 27  

    Może pokaż kod nikt nie będzie oglądał 12 minutowego filmiku. Jakiego używasz uC. Co znaczy "jakby w paczkach"?

    0
  • #3 09 Lip 2014 09:59
    stanleysts
    Poziom 27  

    To jest port na windows - nie ma żadnego uC.
    Czemu uważasz, że za szybko - to 200 to jest nic i ta wartość nic nie mówi -wszystko zależne jest od tego na czym się to puszcza.
    Jeśli chciałbyś mieć np coś w rodzaju milisekund to trzeba: (1000 / portTICK_RATE_MS) - ~1 sekunda

    0
TME logo Szukaj w ofercie
Zamknij 
Wyszukaj w ofercie 200 tys. produktów TME
TME Logo