Easyelectronics.ru

Электроника для всех
Текущее время: 25 фев 2018, 14:23

Часовой пояс: UTC + 5 часов



    • JLCPCB - Платы прототипов всего за 2$ c бесплатной доставкой (при первом заказе)
    • 10 PCBs за $2 для 2 слоев, $15 для 4 слойной, $74 для 6 слойной платы.
    • Крупнейший китайский производитель прототипных плат. 290000+ клиентов & 8000+ заказов в день!
    • LCSC - Крупнейший китайский онлайн магазин радиодеталей.

Начать новую тему Ответить на тему  [ Сообщений: 17 ] 
Автор Сообщение
 Заголовок сообщения: freeRTOS и ее тактирование
СообщениеДобавлено: 14 июл 2015, 02:12 
Только пришел

Зарегистрирован: 19 фев 2012, 17:47
Сообщения: 20
Доброго времени суток.
Перелопатил весь форум по запросу freeRTOS своего случая не нашел =\
К делу: по гайду Ди, слепил проектик на VL-Discovery (с камнем STM32F100RBT6).
Подредактил мальца конфиг ОС (свою частоту).
Да накидал проэкт в 1 таск. Компилю - все ок. Шью - ноль на массу.
Смотрел и проверял все что мог, в подозрение упал SysTick таймер (который собственно является "мотором" ОС). Где он инициализируется ? Как он работает ? Работает ли вообще ?
Приборов (осциллограф), к сожалению, ни под рукой, ни где либо - нет :(
Приведу пример файла мейн.с и конфиг ОС:
Код:
/*
    FreeRTOS V8.0.1 - Copyright (C) 2014 Real Time Engineers Ltd.
    All rights reserved
    VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.
    1 tab == 4 spaces!
*/

#ifndef FREERTOS_CONFIG_H
#define FREERTOS_CONFIG_H


#define configUSE_PREEMPTION         1
#define configUSE_PORT_OPTIMISED_TASK_SELECTION   0
#define configUSE_TICKLESS_IDLE         0
#define configCPU_CLOCK_HZ         ( ( unsigned long ) 8000000 )
#define configTICK_RATE_HZ         ( ( TickType_t ) 1000 )
#define configMAX_PRIORITIES         5
#define configMINIMAL_STACK_SIZE      128
#define configTOTAL_HEAP_SIZE         ( ( size_t ) ( 2 * 1024 ) )
#define configMAX_TASK_NAME_LEN         16
#define configUSE_16_BIT_TICKS         0
#define configIDLE_SHOULD_YIELD         1
#define configUSE_MUTEXES         1
#define configUSE_RECURSIVE_MUTEXES      1
#define configUSE_COUNTING_SEMAPHORES      1
#define configUSE_ALTERNATIVE_API      0 /* Deprecated! */
#define configQUEUE_REGISTRY_SIZE      10
#define configUSE_QUEUE_SETS         0
#define configUSE_TIME_SLICING         0
#define configUSE_NEWLIB_REENTRANT      0
#define configENABLE_BACKWARD_COMPATIBILITY   0

/* Hook function related definitions. */
#define configUSE_IDLE_HOOK         0
#define configUSE_TICK_HOOK         0
#define configCHECK_FOR_STACK_OVERFLOW      0
#define configUSE_MALLOC_FAILED_HOOK      0

/* Run time and task stats gathering related definitions. */
#define configGENERATE_RUN_TIME_STATS      0
#define configUSE_TRACE_FACILITY      0
#define configUSE_STATS_FORMATTING_FUNCTIONS   0

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

/* Software timer related definitions. */
#define configUSE_TIMERS         1
#define configTIMER_TASK_PRIORITY      3
#define configTIMER_QUEUE_LENGTH      10
#define configTIMER_TASK_STACK_DEPTH      configMINIMAL_STACK_SIZE

/* Interrupt nesting behaviour configuration. */
#define configKERNEL_INTERRUPT_PRIORITY      255
#define configMAX_SYSCALL_INTERRUPT_PRIORITY   191




/* 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         0
#define INCLUDE_vTaskCleanUpResources      1
#define INCLUDE_vTaskSuspend         1
#define INCLUDE_vTaskDelayUntil         1
#define INCLUDE_vTaskDelay         1
#define INCLUDE_xResumeFromISR         1
#define INCLUDE_xTaskGetSchedulerState      1
#define INCLUDE_xTaskGetCurrentTaskHandle   0
#define INCLUDE_uxTaskGetStackHighWaterMark   0
#define INCLUDE_xTaskGetIdleTaskHandle      0
#define INCLUDE_xTimerGetTimerDaemonTaskHandle   0
#define INCLUDE_pcTaskGetTaskName      0
#define INCLUDE_eTaskGetState         0
#define INCLUDE_xEventGroupSetBitFromISR   1
#define INCLUDE_xTimerPendFunctionCall      1




#define xPortSysTickHandler SysTick_Handler
#define xPortPendSVHandler PendSV_Handler
#define vPortSVCHandler SVC_Handler


#endif /* FREERTOS_CONFIG_H */

И собсна мейн.с
Код:
#define F_CPU 8000000UL
#include "stm32f10x.h"
#include "FreeRTOS.h"
#include "task.h"
#include "queue.h"

#define BUTTON_ON   ((GPIOA->IDR & 0x01)==0x01)
#define BUTTON_OFF  (!BUTTON_ON)
#define GreenLedON  (GPIOC->BSRR |= GPIO_BSRR_BS8)
#define GreenLedOFF (GPIOC->BSRR |= GPIO_BSRR_BR8)
#define BlueLedON   (GPIOC->BSRR |= GPIO_BSRR_BS9)
#define BlueLedOFF  (GPIOC->BSRR |= GPIO_BSRR_BR9)

void InitAll()
{
   RCC->APB2ENR |= RCC_APB2ENR_IOPAEN;   // ????????? ???????????? GPIOA
   RCC->APB2ENR |= RCC_APB2ENR_IOPCEN;   // ????????? ???????????? GPIOC
   //Конфигурирование GPIOC.9
   GPIOC->CRH &= ~(GPIO_CRH_MODE9 | GPIO_CRH_MODE8);   //очистить разряды MODE
   GPIOC->CRH &= ~(GPIO_CRH_CNF9 | GPIO_CRH_CNF9);  //очистить разряды CNF
   GPIOC->CRH |=  (GPIO_CRH_MODE9_1 | GPIO_CRH_MODE9_1); //выход, 2MHz
   GPIOC->CRH &= ~(GPIO_CRH_CNF9 | GPIO_CRH_CNF9);    //общего назначения, симетричныйx
   
   GPIOA->CRL &= ~GPIO_CRL_MODE0;   //???????? ??????? MODE
   GPIOA->CRL &= ~GPIO_CRL_CNF0;    //???????? ??????? CNF
   GPIOA->CRL |=  GPIO_CRL_CNF0_1;  //?????????? ????, ???????? ? "?????"
   GPIOA->BSRR =  GPIO_BSRR_BR0;    //???????? ????????????? ????????
}

void vLedTask (void *pvParameters)
{
   while(1)
   {
      BlueLedON;
      vTaskDelay(100);
      BlueLedOFF;
      GreenLedON;
      vTaskDelay(1000);
      GreenLedOFF;
   }
}

void vButtonTask (void *pvParameters)
{
   while(1)
   {
      
   }
}

int main ()
{
   InitAll();
   xTaskCreate(vLedTask,(signed char*)"LedTask", configMINIMAL_STACK_SIZE,
               NULL, tskIDLE_PRIORITY + 1, NULL);
   vTaskStartScheduler();
}



И да, неужели этот кусок кода инициализирует и вертит таймер-мотор нашей ОС ???
Код:
#define xPortSysTickHandler SysTick_Handler
#define xPortPendSVHandler PendSV_Handler
#define vPortSVCHandler SVC_Handler


Проект в архиве не влазит в сообщение =\

Буду рад за любую помощь, хочется поскорей запустить этого монстра эмуляции многозадачности :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: freeRTOS и ее тактирование
СообщениеДобавлено: 14 июл 2015, 07:43 
Старожил
Аватара пользователя

Зарегистрирован: 26 окт 2013, 07:58
Сообщения: 1723
Почему 8 МГц частота тактирования контроллера?
Это частота кварца!

Тут частота тактирования контроллера задается

system_stm32f10x.c

Код:
if defined (STM32F10X_LD_VL) || (defined STM32F10X_MD_VL) || (defined STM32F10X_HD_VL)
/* #define SYSCLK_FREQ_HSE    HSE_VALUE */
#define SYSCLK_FREQ_24MHz  24000000
#else
/* #define SYSCLK_FREQ_HSE    HSE_VALUE */
#define SYSCLK_FREQ_24MHz  24000000
/*#define SYSCLK_FREQ_36MHz  36000000*/
/*#define SYSCLK_FREQ_48MHz  48000000*/
/* #define SYSCLK_FREQ_56MHz  56000000 */
/*#define SYSCLK_FREQ_72MHz  72000000*/
#endif

/*!< Uncomment the following line if you need to use external SRAM mounted
     on STM3210E-EVAL board (STM32 High density and XL-density devices) or on
     STM32100E-EVAL board (STM32 High-density value line devices) as data memory */
#if defined (STM32F10X_HD) || (defined STM32F10X_XL) || (defined STM32F10X_HD_VL)
/* #define DATA_IN_ExtSRAM */
#endif

/*!< Uncomment the following line if you need to relocate your vector Table in
     Internal SRAM. */
/* #define VECT_TAB_SRAM */
#define VECT_TAB_OFFSET  0x0 /*!< Vector Table base offset field.
                                  This value must be a multiple of 0x200. */


/**
  * @}
  */

/** @addtogroup STM32F10x_System_Private_Macros
  * @{
  */

/**
  * @}
  */

/** @addtogroup STM32F10x_System_Private_Variables
  * @{
  */

/*******************************************************************************
*  Clock Definitions
*******************************************************************************/
#ifdef SYSCLK_FREQ_HSE
  uint32_t SystemCoreClock         = SYSCLK_FREQ_HSE;        /*!< System Clock Frequency (Core Clock) */
#elif defined SYSCLK_FREQ_24MHz
  uint32_t SystemCoreClock         = SYSCLK_FREQ_24MHz;        /*!< System Clock Frequency (Core Clock) */
#elif defined SYSCLK_FREQ_36MHz
  uint32_t SystemCoreClock         = SYSCLK_FREQ_36MHz;        /*!< System Clock Frequency (Core Clock) */
#elif defined SYSCLK_FREQ_48MHz
  uint32_t SystemCoreClock         = SYSCLK_FREQ_48MHz;        /*!< System Clock Frequency (Core Clock) */
#elif defined SYSCLK_FREQ_56MHz
  uint32_t SystemCoreClock         = SYSCLK_FREQ_56MHz;        /*!< System Clock Frequency (Core Clock) */
#elif defined SYSCLK_FREQ_72MHz
  uint32_t SystemCoreClock         = SYSCLK_FREQ_72MHz;        /*!< System Clock Frequency (Core Clock) */
#else /*!< HSI Selected as System Clock source */
  uint32_t SystemCoreClock         = HSI_VALUE;        /*!< System Clock Frequency (Core Clock) */
#endif

__I uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9};
/**
  * @}
  */

/** @addtogroup STM32F10x_System_Private_FunctionPrototypes
  * @{
  */

static void SetSysClock(void);

#ifdef SYSCLK_FREQ_HSE
  static void SetSysClockToHSE(void);
#elif defined SYSCLK_FREQ_24MHz
  static void SetSysClockTo24(void);
#elif defined SYSCLK_FREQ_36MHz
  static void SetSysClockTo36(void);
#elif defined SYSCLK_FREQ_48MHz
  static void SetSysClockTo48(void);
#elif defined SYSCLK_FREQ_56MHz
  static void SetSysClockTo56(void); 
#elif defined SYSCLK_FREQ_72MHz
  static void SetSysClockTo72(void);
#endif

#ifdef DATA_IN_ExtSRAM
  static void SystemInit_ExtMemCtl(void);
#endif /* DATA_IN_ExtSRAM */


И обязательно должен быть вызав функции SystemInit();

У меня она вызывается в обработчике прерывания по ресету
Код:
void Default_Reset_Handler(void)
{
  /* Initialize data and bss */
  unsigned long *pulSrc, *pulDest;

  /* Copy the data segment initializers from flash to SRAM */
  pulSrc = &_sidata;

  for(pulDest = &_sdata; pulDest < &_edata; )
  {
    *(pulDest++) = *(pulSrc++);
  }
 
  /* Zero fill the bss segment.  This is done with inline assembly since this
     will clear the value of pulDest if it is not kept in a register. */
  __asm("  ldr     r0, =_sbss\n"
        "  ldr     r1, =_ebss\n"
        "  mov     r2, #0\n"
        "  .thumb_func\n"
        "zero_loop:\n"
        "    cmp     r0, r1\n"
        "    it      lt\n"
        "    strlt   r2, [r0], #4\n"
        "    blt     zero_loop");
 
  /* Setup the microcontroller system. */
  SystemInit();
   
  /* Call the application's entry point.*/
  main();
}


в файле system_stm32f10x.h


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: freeRTOS и ее тактирование
СообщениеДобавлено: 14 июл 2015, 22:38 
Только пришел

Зарегистрирован: 19 фев 2012, 17:47
Сообщения: 20
Спасибо за замечание.
Но тогда встречный вопрос: когда я городил обычные мигалки на быдло-делее (через зацикленный for), то все работало и задержка была размером с рассчитанную (по кварцу). В работу клокера я не лез, все работало по дефолту.
Я не менял дефайны в system_stm32f10x.c и у меня нет системинит в system_stm32f10x.h
НО все работало, а с ртос какая то лажа.
Если не затруднит - разъясните эти вопросы, а то уж больно много вопросов появляется :)

Добавил системинит в мейн, я так понял эта функция и отвечает за SysTick таймер, но изменений нет =\


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: freeRTOS и ее тактирование
СообщениеДобавлено: 15 июл 2015, 03:00 
Только пришел

Зарегистрирован: 19 фев 2012, 17:47
Сообщения: 20
Я уже волосы рву на голове !!! =\
Может кто скинуть рабочий проект на vlDiscovery ? Ну или накидать мигалку побыстрому, а то у меня уже сил не хватает (
А по образцу я уже вкумекаю где ж я свернул не туда.

Заранее спасибо


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: freeRTOS и ее тактирование
СообщениеДобавлено: 15 июл 2015, 03:26 
Старожил

Зарегистрирован: 11 фев 2013, 01:54
Сообщения: 339
В кубе слепить не судьба?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: freeRTOS и ее тактирование
СообщениеДобавлено: 15 июл 2015, 15:48 
Только пришел

Зарегистрирован: 19 фев 2012, 17:47
Сообщения: 20
Куб не лепит под F100 =\


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: freeRTOS и ее тактирование
СообщениеДобавлено: 15 июл 2015, 17:52 
Старожил

Зарегистрирован: 11 фев 2013, 01:54
Сообщения: 339
Ну для vldiscovery у него stm32f100 нету, но можно сделать проект как просто MCU. IDE какая?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: freeRTOS и ее тактирование
СообщениеДобавлено: 15 июл 2015, 20:55 
Только пришел

Зарегистрирован: 19 фев 2012, 17:47
Сообщения: 20
IDE Keil. я даже проект Ди брал, менял на свой F100RB и правил порты и тактирование .... и ничего, не могу понять где косяк =\


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: freeRTOS и ее тактирование
СообщениеДобавлено: 16 июл 2015, 13:39 
Заглядывает иногда

Зарегистрирован: 17 ноя 2014, 10:37
Сообщения: 33
В stm32f4xx_it.c для stm32f429 делал так в
void SysTick_Handler(void)
{
if (xTaskGetSchedulerState()!=taskSCHEDULER_NOT_STARTED)
{
xPortSysTickHandler();
}
HAL_IncTick();
}

Посмотри свой stm32f1xx_it.c ...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: freeRTOS и ее тактирование
СообщениеДобавлено: 16 июл 2015, 17:21 
Только пришел

Зарегистрирован: 19 фев 2012, 17:47
Сообщения: 20
Вроде разобрался, а сделал принудительную настройку тактирования на 24 МГц
[code]
RCC->CFGR |= RCC_CFGR_PLLSRC;
RCC->CR &= ~RCC_CR_PLLON;
RCC->CFGR &= ~RCC_CFGR_PLLMULL;
RCC->CFGR |= RCC_CFGR_PLLMULL3;
RCC->CR |= RCC_CR_PLLON;
while((RCC->CR & RCC_CR_PLLRDY)==0) {}
Изображение

Буду разбираться, что происходит при не настроенном тактировании, и почему криво работает при 8 МГц в обход PLL.
Если у кого есть что то по этому поводу - прошу дополнить.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: freeRTOS и ее тактирование
СообщениеДобавлено: 29 окт 2016, 22:24 
Только пришел

Зарегистрирован: 18 дек 2014, 18:08
Сообщения: 7
Добрый день.

Чтобы не плодить темы, напишу здесь.

Проблема аналогичная, как у автора. пытаюсь запустить FreeRTOS на STM32VLDiscovery (STM32F100RB). Перепробовал все, что указано в этой теме, но все равно не заводится.

В качестве задачи - моргалка двух светодиодов (PC8 и PC9).
Проект ДЛЯ KEIL: https://drive.google.com/open?id=0B0pOJrxUYYrdSWwweU1NVFdtNlk.

Что не так?

Код:
#include "stm32f10x.h"                  // Device header
#include "FreeRTOS.h"
#include "task.h"
#include "queue.h"

void start_init(void)
{
   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);      //PC8, PC9 на выход push-pull
   
    GPIO_InitTypeDef pc8_pc9_init;
    pc8_pc9_init.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9;
    pc8_pc9_init.GPIO_Mode = GPIO_Mode_Out_PP;
    pc8_pc9_init.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOC, &pc8_pc9_init);

}
void vLedTask(void *pvParameters)                  //Задача для RTOS
{
   while(1)
   {
      GPIOC->BSRR = GPIO_BSRR_BS8 | GPIO_BSRR_BR9;
      vTaskDelay(500);
      GPIOC->BSRR = GPIO_BSRR_BR8 | GPIO_BSRR_BS9;
      vTaskDelay(500);
   }
}

int main (void)
{
    start_init();
    while (1)
   {
      GPIO_SetBits(GPIOC, GPIO_Pin_8);            //Мигалка для проверки. Если закоментить две последние строки, то эта мигалка работает
      uint32_t x = 10000000;                     //В противном случае не работает. Даже однократно светодиоды НЕ ЗАГОРАЮТСЯ (а должны бы)
      while (x--);
      GPIO_ResetBits(GPIOC, GPIO_Pin_8);
      x = 10000000;
      while (x--);                           //конец мигалки для проверки.
   
      xTaskCreate(vLedTask, "LED", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY+1, NULL);      //если это закоментить, то мигалка (выше) работает
      vTaskStartScheduler();                                                      //если это закоментить, то мигалка (выше) работает
   }
}


FreeRTOSConfig.h:
Код:
#ifndef FREERTOS_CONFIG_H
#define FREERTOS_CONFIG_H



#define configUSE_PREEMPTION         1
#define configUSE_IDLE_HOOK            0         //CHANGED 1 to 0
#define configUSE_TICK_HOOK            0
#define configCPU_CLOCK_HZ            ( 24000000UL )   
#define configTICK_RATE_HZ            ( ( TickType_t ) 1000 )
#define configMAX_PRIORITIES         ( 5 )
#define configMINIMAL_STACK_SIZE      ( ( unsigned short ) 70 )
#define configTOTAL_HEAP_SIZE         ( ( size_t ) ( 7 * 1024 ) )
#define configMAX_TASK_NAME_LEN         ( 10 )
#define configUSE_TRACE_FACILITY      0
#define configUSE_16_BIT_TICKS         0
#define configIDLE_SHOULD_YIELD         1
#define configUSE_MUTEXES            1
#define configQUEUE_REGISTRY_SIZE      0
#define configGENERATE_RUN_TIME_STATS   0
#define configCHECK_FOR_STACK_OVERFLOW   0         //CHANGED 2 to 0
#define configUSE_RECURSIVE_MUTEXES      0
#define configUSE_MALLOC_FAILED_HOOK   0         //CHANGED 1 to 0
#define configUSE_APPLICATION_TASK_TAG   0
#define configUSE_COUNTING_SEMAPHORES   0

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

/* Software timer definitions. */
#define configUSE_TIMERS            1
#define configTIMER_TASK_PRIORITY      ( 3 )
#define configTIMER_QUEUE_LENGTH      5
#define configTIMER_TASK_STACK_DEPTH   ( configMINIMAL_STACK_SIZE )

/* 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   1
#define INCLUDE_vTaskSuspend         1
#define INCLUDE_vTaskDelayUntil         1
#define INCLUDE_vTaskDelay            1

/* Use the system definition, if there is one */
#ifdef __NVIC_PRIO_BITS
   #define configPRIO_BITS       __NVIC_PRIO_BITS
#else
   #define configPRIO_BITS       4        /* 15 priority levels */
#endif

#define configLIBRARY_LOWEST_INTERRUPT_PRIORITY         15
#define configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY   5

/* The lowest priority. */
#define configKERNEL_INTERRUPT_PRIORITY    ( configLIBRARY_LOWEST_INTERRUPT_PRIORITY << (8 - configPRIO_BITS) )
/* Priority 5, or 95 as only the top four bits are implemented. */
/* !!!! configMAX_SYSCALL_INTERRUPT_PRIORITY must not be set to zero !!!!
See http://www.FreeRTOS.org/RTOS-Cortex-M3-M4.html. */
#define configMAX_SYSCALL_INTERRUPT_PRIORITY    ( configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY << (8 - configPRIO_BITS) )
   
#define configASSERT( x ) if( ( x ) == 0 ) { taskDISABLE_INTERRUPTS(); for( ;; ); }   
   
#define vPortSVCHandler SVC_Handler
#define xPortPendSVHandler PendSV_Handler
#define xPortSysTickHandler SysTick_Handler

#endif /* FREERTOS_CONFIG_H */



Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: freeRTOS и ее тактирование
СообщениеДобавлено: 30 окт 2016, 17:23 
Старожил
Аватара пользователя

Зарегистрирован: 26 окт 2013, 07:58
Сообщения: 1723
Код:
int main (void)
{
    start_init();

GPIO_SetBits(GPIOC, GPIO_Pin_8);            //Мигалка для проверки. Если закоментить две последние строки, то эта мигалка работает
      uint32_t x = 10000000;                     //В противном случае не работает. Даже однократно светодиоды НЕ ЗАГОРАЮТСЯ (а должны бы)
      while (x--);
      GPIO_ResetBits(GPIOC, GPIO_Pin_8);
      x = 10000000;
      while (x--);                           //конец мигалки для проверки.
   
      xTaskCreate(vLedTask, "LED", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY+1, NULL);      //если это закоментить, то мигалка (выше) работает
      vTaskStartScheduler();                                                      //если это закоментить, то мигалка (выше) работает

    while (1)
   {
     
   }
}






Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: freeRTOS и ее тактирование
СообщениеДобавлено: 30 окт 2016, 22:04 
Старожил
Аватара пользователя

Зарегистрирован: 30 янв 2014, 18:09
Сообщения: 575
Откуда: Киев
Вы вообще читали хоть что-нибудь о FreeRTOS?
Кто так программу пишет под неё?
Как только вы войдёте в шедулер, оттуда возврата не будет, он будет запускать назначенные задачи.
Наоборот, если вызов шедулера вернётся - это крах RTOS!
Забудьте о задержках лупами!
RTFM!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: freeRTOS и ее тактирование
СообщениеДобавлено: 31 окт 2016, 05:46 
Только пришел

Зарегистрирован: 18 дек 2014, 18:08
Сообщения: 7
Успокойтесь.
Читал. Код - результат целого дня всяких экспериментов, в попытках разобраться что не так. Поэтому не важны ни задержки лупами, ни неправильные бесконечные циклы. Писал и "правильную" программу - тоже не заводится.
Должно быть так: моргнул 1 раз светодиод (тестовая мигалка) дальше запускается шедулер, который должен крутить vLedTask. Управление в main он, естественно, отдавать не должен. Но ничего не крутится. Почему?
Зато если не объявлять задачу и не запускать шедулер - то тестовая мигалка вполне себе работает, потому как остается одна в бесконечном цикле.
Согласен, что код кривой и не по феншую, но я не понимаю почему светодиод не мигает, причем ни от тестовой мигалки, ни от шедулера.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: freeRTOS и ее тактирование
СообщениеДобавлено: 31 окт 2016, 12:59 
Старожил
Аватара пользователя

Зарегистрирован: 30 янв 2014, 18:09
Сообщения: 575
Откуда: Киев
Для проверки нужно покопаться в заголовках RTOS.
Для её корректной работы необходим один железный таймер. Чаще всего это SysTick. Он должен быть настроен на 1 мс в самом начале программы и его прерывание должно быть подключено к FreeRTOS. Смотрите стартап файлы: где-то не подключено.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: freeRTOS и ее тактирование
СообщениеДобавлено: 31 окт 2016, 15:30 
Только пришел

Зарегистрирован: 18 дек 2014, 18:08
Сообщения: 7
Дошел до метода научного тыка. И помогло!
#define configTOTAL_HEAP_SIZE ( ( size_t ) ( 7 * 1024 ) ) - тут собака зарыта оказалась.
Стоило поставить 6 * 1024 - все сразу заработало.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: freeRTOS и ее тактирование
СообщениеДобавлено: 01 ноя 2016, 12:22 
Старожил
Аватара пользователя

Зарегистрирован: 30 янв 2014, 18:09
Сообщения: 575
Откуда: Киев
Хорошо то, что хорошо заканчивается.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 17 ] 

Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB