Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту


 
Опции темы
Непрочитано 27.12.2017, 04:03  
CERGEI1982
Почётный гражданин KAZUS.RU
 
Аватар для CERGEI1982
 
Регистрация: 03.01.2007
Адрес: Россия,Иркутская обл.
Сообщений: 2,579
Сказал спасибо: 351
Сказали Спасибо 315 раз(а) в 193 сообщении(ях)
CERGEI1982 на пути к лучшему
По умолчанию Re: FreeRTOS?? Разобраться с демо проектом??

Сообщение от -Alan- Посмотреть сообщение
Сам использую в проекте динамическую память (heap_4.c) и пересылаю указатели на структуру:
struct {
uint8_t DataLength;
uint8_t Data[];
};


Код:
	dataframe = pvPortMalloc(5);
	dataframe-›Length = 4;
	dataframe-›Data[0] = Byte0;
	dataframe-›Data[1] = Byte1;
...
	xQueueSend(q_Main, &dataframe, 0); // Из другого потока, но можно и из прерывания через xQueueSendFromISR

‹...›
while(1) {
	if (xQueueReceive(q_Main, &dataframe, 0) == pdPASS ) {
		// Действия с данными
		vPortFree(dataframe);
	};
	vTaskDelay(5);
};

Естественно, очередь создаётся так:
q_Main =	xQueueCreate(64, sizeof(void *));	// Очередь указателей на данные
А если uint8_t Data[]; превысит больше 4 байт ? Или у вас указано dataframe-›Length = 4; размерность массива uint8_t Data[] ?
Подумываю попробовать ваш метод создание и передачи в очередь структур.
Реклама:
__________________
Глаза боятся,а руки делают.
CERGEI1982 вне форума  
Непрочитано 27.12.2017, 11:03  
NewWriter
Почётный гражданин KAZUS.RU
 
Аватар для NewWriter
 
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,489
Сказал спасибо: 401
Сказали Спасибо 2,216 раз(а) в 1,314 сообщении(ях)
NewWriter на пути к лучшему
По умолчанию Re: FreeRTOS?? Разобраться с демо проектом??

С передачей адреса есть такая фишка - по указанному адресу должна существовать актуальная информация на момент ее получения. То есть, задача, в которой хранится эта инфа, не должна удаляться, а инфа не должна быть перезаписана в задаче.
Передача адреса - это конечно красиво, но нарушает принципы многозадачности операционки - нет защищенности информации от изменения.
Копирование в очередь/из очереди основано на атомарном алгоритме memcpy.
Передавать в очереди адрес хорошо только при больших объемах инфы, например буфер графического дисплея, который стопудово всегда существует, и чаще всего он существует не внутри стека задачи, а в области статичных данных, вне кучию
NewWriter вне форума  
Сказали "Спасибо" NewWriter
CERGEI1982 (27.12.2017)
Непрочитано 27.12.2017, 15:39  
CERGEI1982
Почётный гражданин KAZUS.RU
 
Аватар для CERGEI1982
 
Регистрация: 03.01.2007
Адрес: Россия,Иркутская обл.
Сообщений: 2,579
Сказал спасибо: 351
Сказали Спасибо 315 раз(а) в 193 сообщении(ях)
CERGEI1982 на пути к лучшему
По умолчанию Re: FreeRTOS?? Разобраться с демо проектом??

Иногда приходит мысль из того как надо писать на питоне (дзен питона):

Красивое лучше, чем уродливое.
Явное лучше, чем неявное.
Простое лучше, чем сложное.
Сложное лучше, чем запутанное.
Плоское лучше, чем вложенное.
Разреженное лучше, чем плотное.
Читаемость имеет значение.
__________________
Глаза боятся,а руки делают.
CERGEI1982 вне форума  
Непрочитано 28.12.2017, 10:54  
-Alan-
Прописка
 
Аватар для -Alan-
 
Регистрация: 05.12.2008
Адрес: Россия, Омск
Сообщений: 145
Сказал спасибо: 39
Сказали Спасибо 29 раз(а) в 22 сообщении(ях)
-Alan- на пути к лучшему
По умолчанию Re: FreeRTOS?? Разобраться с демо проектом??

Сообщение от CERGEI1982 Посмотреть сообщение
А если uint8_t Data[]; превысит больше 4 байт ? Или у вас указано dataframe-›Length = 4; размерность массива uint8_t Data[] ?
Подумываю попробовать ваш метод создание и передачи в очередь структур.
Размер структуры, которая помещается в память - расчитывается предварительно. Типов сообщений пока не так много, чтобы запутаться.

Реально - заполнение происходит подобным образом:
PHP код:
uint8_t tmp_buffer[32];
uint8_t i;

‹...›
0;
(
указатель-на-структуру)tmp_buffer[i++] = data;
(
указатель-на-структуру)tmp_buffer[i++] = data;
(
указатель-на-структуру)tmp_buffer[i++] = data;
‹...›
frame pvPortMalloc(i);
‹...›
(
Копирование данных в кучу)
(
Отправка укзателя в очередь
То есть, фактически копирование - одно. Только после выделения необходимого количества памяти. После - только чтение и обработка по указателю, в который был скопирован переданый указатель.
-Alan- вне форума  
Непрочитано 02.01.2018, 08:31  
CERGEI1982
Почётный гражданин KAZUS.RU
 
Аватар для CERGEI1982
 
Регистрация: 03.01.2007
Адрес: Россия,Иркутская обл.
Сообщений: 2,579
Сказал спасибо: 351
Сказали Спасибо 315 раз(а) в 193 сообщении(ях)
CERGEI1982 на пути к лучшему
По умолчанию Re: FreeRTOS?? Разобраться с демо проектом??

При отладке в кейле уходит в осадок программа на HardFault_Handler при передачи из прерывания семафора.
Создание семафора:
PHP код:
    // semafor test
        
xSemaforTest=xSemaphoreCreateBinary();
        if(
xSemaforTest==NULL)
        { while(
1error_semafor=1; } 
Прерывание
PHP код:
void RTC_IRQHandler(void)
{
    if(
RTC-›CRL RTC_CRL_SECF)
    {
        
//-------------------------------------------
        
static BaseType_t xHigherPriorityTaskWoken;
        
//-------------------------------------------
        
RTC-›CRL &= ~RTC_CRL_SECF;


        
xHigherPriorityTaskWoken pdFALSE;
        
xSemaphoreGiveFromISR(xSemaforTest, &xHigherPriorityTaskWoken);
        
/* There are no transmissions in progress, so no tasks to notify. */
    //xTaskToNotify = NULL;
        
portEND_SWITCHING_ISR(xHigherPriorityTaskWoken);
    }
    

При заливки кода все работает корректно,без отладчика.
Использую ST-Link V2 прошитый в J-Link
Миниатюры:
Нажмите на изображение для увеличения
Название: 2018-01-02_12-25-20.png
Просмотров: 0
Размер:	57.0 Кб
ID:	123498   Нажмите на изображение для увеличения
Название: 2018-01-02_12-26-25.png
Просмотров: 0
Размер:	66.6 Кб
ID:	123499  
__________________
Глаза боятся,а руки делают.
CERGEI1982 вне форума  
Непрочитано 02.01.2018, 16:58  
CERGEI1982
Почётный гражданин KAZUS.RU
 
Аватар для CERGEI1982
 
Регистрация: 03.01.2007
Адрес: Россия,Иркутская обл.
Сообщений: 2,579
Сказал спасибо: 351
Сказали Спасибо 315 раз(а) в 193 сообщении(ях)
CERGEI1982 на пути к лучшему
По умолчанию Re: FreeRTOS?? Разобраться с демо проектом??

Проблема решена.
Виноват сам.
В прерывании отправляю семафор,но включаю прерывание еще не создав семафора. Перенес включение прерывание в задачу где работает с семафором и все встало на свои места. Очень познавательно
__________________
Глаза боятся,а руки делают.
CERGEI1982 вне форума  
Непрочитано 02.01.2018, 18:17  
-Alan-
Прописка
 
Аватар для -Alan-
 
Регистрация: 05.12.2008
Адрес: Россия, Омск
Сообщений: 145
Сказал спасибо: 39
Сказали Спасибо 29 раз(а) в 22 сообщении(ях)
-Alan- на пути к лучшему
По умолчанию Re: FreeRTOS?? Разобраться с демо проектом??

У меня была аналогичная ситуация, где:
1. RTOS инициализируется после настройки периферии и разрешения прерываний.
2. Данные из (конкретно) UART'а - основной консоли для диагностики, принимаются в прерывании и складываются в очередь.
3. Если в момент между инициализацией периферии и запуском RTOS придёт байт из консоли - вылетаем в HardFault по причине использования нулевого указателя.

Решилось отложеным разрешением чтения данных из консоли.
-Alan- вне форума  
Непрочитано 18.01.2018, 17:28  
CERGEI1982
Почётный гражданин KAZUS.RU
 
Аватар для CERGEI1982
 
Регистрация: 03.01.2007
Адрес: Россия,Иркутская обл.
Сообщений: 2,579
Сказал спасибо: 351
Сказали Спасибо 315 раз(а) в 193 сообщении(ях)
CERGEI1982 на пути к лучшему
По умолчанию Re: FreeRTOS?? Разобраться с демо проектом??

Трассировку кто пробовал с помощью Tracealyzer for FreeRTOS ?
Установил,только вот не понял есть ли там бесплатная регистрация и какие ограничения.
__________________
Глаза боятся,а руки делают.
CERGEI1982 вне форума  
Непрочитано 09.03.2018, 12:15  
Den
Частый гость
 
Регистрация: 03.05.2017
Сообщений: 32
Сказал спасибо: 3
Сказали Спасибо 1 раз в 1 сообщении
Den на пути к лучшему
По умолчанию Re: FreeRTOS?? Разобраться с демо проектом??

Добрый день. Прошу хэлпа. Никак не удается подружить FreeRtos с проектом. Делаю все по инструкции: подключаю файлы из распакованного архива к проекту, прописываю пути. Создаю задачу - зажечь светодиоды на discovery. При компиляции нет ошибок, предупреждений, но и светодиоды не загораются...Вначале ругался на отсутствие некоторых функций, сделал заглушки.

#include "stm32f4xx.h"
#include "stm32f4xx_gpio.h"
#include "stm32f4xx_rcc.h"
#include "freeRTOS.h"
#include "task.h"
#include "FreeRTOSConfig.h"

#define LedOn GPIO_SetBits(GPIOD, GPIO_Pin_12 | GPIO_Pin_13| GPIO_Pin_14| GPIO_Pin_15)
#define LedOff GPIO_ResetBits(GPIOD, GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15)

void vPortEnableVFP( void ){} //-------------------------
void vPortStartFirstTask( void ){}
void vApplicationTickHook( void ){} // заглушки
void vApplicationMallocFailedHook( void ){}
void vApplicationIdleHook( void ){} //--------------------

void GPIOinit();

void LedTask(void* pvParameters)
{
while(1)
{
LedOn;
}
}


void main(void)
{
GPIOinit();
xTaskCreate(LedTask, "LedBlink", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY + 1, NULL);
vTaskStartScheduler();
while(1)
{
}
}

void GPIOinit()
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12 | GPIO_Pin_13| GPIO_Pin_14| GPIO_Pin_15;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_Init(GPIOD, &GPIO_InitStructure);

}
Den вне форума  
Непрочитано 09.03.2018, 13:47  
Easyrider83
Гуру портала
 
Аватар для Easyrider83
 
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 918
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
Easyrider83 на пути к лучшему
По умолчанию Re: FreeRTOS?? Разобраться с демо проектом??

Задержку поставьте обязательно vTaskDelay
Easyrider83 вне форума  
 

Закладки
Опции темы

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите разобраться с ОУ (приведение к "земле" напряжения со смещением) pittyalex Электроника - это просто 165 08.04.2015 00:55
Помогите разобраться с Контроллер Beckhoff CX1010-0021 wwwwwwww8 Микроконтроллеры, АЦП, память и т.д 9 20.05.2014 16:15
помогите разобраться в кварцах kobraxxx Информация по радиокомпонентам 9 05.01.2012 17:38
Помогите разобраться с PIC18F4550 и USB john2103 Микроконтроллеры, АЦП, память и т.д 26 02.08.2011 11:52
Как совместить Microblaze.bit с общим проектом ISE.bit? tixonia Цифровые сигнальные процессоры 1 28.12.2007 10:08


Часовой пояс GMT +4, время: 19:41.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot