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

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

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

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

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

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


 
Опции темы
Непрочитано 24.12.2012, 17:24  
wellcom
Временная регистрация
 
Регистрация: 25.09.2008
Сообщений: 95
Сказал спасибо: 39
Сказали Спасибо 7 раз(а) в 7 сообщении(ях)
wellcom на пути к лучшему
Вопрос Вопросник по FreeRTOS

Доброго времени суток форум. Изучаю FreeRTOS на базе Atmega128+AtmelStudio 6.
Затормозил на этапе использования очередей, а именно:
Код:
//определяю ст-ру, которая будет елементом очереди
typedef struct
{
	unsigned portBASE_TYPE uint8_Command;
	int32_t int32_Data_1;
	int32_t int32_Data_2;
	unsigned portBASE_TYPE  uint8_Data_3;
}CmdData; 

xQueueCMD = xQueueCreate ( 4, sizeof(CmdData)); //создаем очередь
Не могу вкурить как записать в такую очередь данные, прошу помощи
Реклама:
wellcom вне форума  
Непрочитано 24.12.2012, 19:54  
Hives
Гражданин KAZUS.RU
 
Регистрация: 25.11.2010
Сообщений: 516
Сказал спасибо: 1
Сказали Спасибо 126 раз(а) в 109 сообщении(ях)
Hives на пути к лучшему
По умолчанию Re: Вопросник по FreeRTOS

Код:
CmdData Data;
// Data ‹‹ ...;
xQueueSend(xQueueCMD, (void*) &Data, (portTickType) 0);
?
Hives вне форума  
Сказали "Спасибо" Hives
wellcom (25.12.2012)
Непрочитано 09.01.2013, 14:40  
wellcom
Временная регистрация
 
Регистрация: 25.09.2008
Сообщений: 95
Сказал спасибо: 39
Сказали Спасибо 7 раз(а) в 7 сообщении(ях)
wellcom на пути к лучшему
По умолчанию Re: Вопросник по FreeRTOS

паривет! подскажите пожалуйста как лучше передать большой строковый масив в UART - через очередь или как то по другому. пытался делать так - не работает должным образом (очередь на 32 байта, в массиве больше 32 байт) и в UART получаю только начало и конец маcсива.
Код:
const unsigned portBASE_TYPE sHlpStrLong [] PROGMEM="большой масив"
void HelpTask (void *pvParameters)
{
	unsigned portBASE_TYPE *c;
	uint8_t symb;
	c = (uint8_t*) sHlpStrLong; //берем начало масива
	while(1)//(pgm_read_byte (&c[i])!=0x0)/*&&(i‹TX_BUFFER_SIZE)*/
	{
		symb = pgm_read_byte (c);
		//vTaskDelay(1/portTICK_RATE_MS); //_delay_ms(1);
		if (xQueueSendToBack(xQueueUartTX,(void*) &symb,(portTickType)portMAX_DELAY)!=pdPASS) //==pdPASS только тогда когда данные успешно отправлены
		{
			PORTC =0x0	;
		}
		else
		{
			if(symb==0x0) //если конец масива
			{
			  vTaskDelete(NULL);/* Убить после выполнения */		
			}
		    c++;
		}
	}
}
Читал, что можно передавать строки через очередь с помощью указателей, мозг сломал - не пойму как это сделать. Help!
wellcom вне форума  
Непрочитано 09.01.2013, 14:58  
Hives
Гражданин KAZUS.RU
 
Регистрация: 25.11.2010
Сообщений: 516
Сказал спасибо: 1
Сказали Спасибо 126 раз(а) в 109 сообщении(ях)
Hives на пути к лучшему
По умолчанию Re: Вопросник по FreeRTOS

я могу дико ошибаться, но какая связь между очередями и uart?
Hives вне форума  
Непрочитано 09.01.2013, 15:04  
wellcom
Временная регистрация
 
Регистрация: 25.09.2008
Сообщений: 95
Сказал спасибо: 39
Сказали Спасибо 7 раз(а) в 7 сообщении(ях)
wellcom на пути к лучшему
По умолчанию Re: Вопросник по FreeRTOS

Сообщение от Hives Посмотреть сообщение
я могу дико ошибаться, но какая связь между очередями и uart?
есть у меня такая задача по отправке байт в уарт...
Код:
void vGatekeeperUART_TX_Task( void *pvParameteres )  //отправка данных из очереди в UART
{
	uint8_t Byte;
	for(;;)
	{
	  xQueueReceive( xQueueUartTX, &Byte, portMAX_DELAY);   //ожидаем получения новых данных, задача в это время заблокирована
		
	  UART_SendChar(Byte); //первый символ в UDR, остальные в масив и по прерыванию отправляются
        }
}
и мне нужно передать большой char-ровский масив в тот же уарт.
wellcom вне форума  
Непрочитано 09.01.2013, 15:33  
Hives
Гражданин KAZUS.RU
 
Регистрация: 25.11.2010
Сообщений: 516
Сказал спасибо: 1
Сказали Спасибо 126 раз(а) в 109 сообщении(ях)
Hives на пути к лучшему
По умолчанию Re: Вопросник по FreeRTOS

а неоправданно повышенные накладные расходы на передачу каждого байта не смущают?

для начала я бы определился с моделью передачи:
1. задача готовит данные, передает их, ждет завершения передачи и анализирует результат обмена
2. задача готовит буфер с данными, отдает его на передачу и забывает о нем.

у вас как?
Hives вне форума  
Непрочитано 09.01.2013, 15:46  
wellcom
Временная регистрация
 
Регистрация: 25.09.2008
Сообщений: 95
Сказал спасибо: 39
Сказали Спасибо 7 раз(а) в 7 сообщении(ях)
wellcom на пути к лучшему
По умолчанию Re: Вопросник по FreeRTOS

так и есть, неоправданно повышенные расходы на передачу...как их побороть???
Вариант 2. Задача (vGatekeeperUART_TX_Task) ждет появления данных в очереди и передает их в буфер на передачу (первый символ сразу в UDR что бы потом по прерыванию передать остальные). Передает, но только начало и конец масива а он около 600 символов и это не предел.
Вот часть недостающего кода
Код:
void UART_SendChar(uint8_t c) 
{                          
taskENTER_CRITICAL();
         if ((tx_rd_index!=tx_wr_index) || ((UCSR0A & DATA_REGISTER_EMPTY)==0)) //если идет передача - остальные в буфер и по прерыванию
	{                                                                    
	 if (++tx_wr_index == TX_BUFFER_SIZE) tx_wr_index=0;              
         tx_buffer[tx_wr_index]=c;                                         
	} //вначале отправим символ сразу в UDR
	else
	{                                                                     
	  UDR0=c; 
	};
taskEXIT_CRITICAL(); 										
	return;
}

Последний раз редактировалось wellcom; 09.01.2013 в 17:46.
wellcom вне форума  
Непрочитано 09.01.2013, 21:16  
Hives
Гражданин KAZUS.RU
 
Регистрация: 25.11.2010
Сообщений: 516
Сказал спасибо: 1
Сказали Спасибо 126 раз(а) в 109 сообщении(ях)
Hives на пути к лучшему
По умолчанию Re: Вопросник по FreeRTOS

как-как - кидать данные блоками, разумеется.
для начала сделай нормальное FIFO а эту гадость SendChar() выкинь нафиг.
через очередь прокидывай только адрес/размер блока на передачу.
// пример fifo могу дать, в принципе пример передающей задачи тоже. если хочешь
Hives вне форума  
Непрочитано 09.01.2013, 21:55  
Boba_spb
Почётный гражданин KAZUS.RU
 
Регистрация: 08.06.2008
Сообщений: 1,394
Сказал спасибо: 4
Сказали Спасибо 183 раз(а) в 167 сообщении(ях)
Boba_spb на пути к лучшему
По умолчанию Re: Вопросник по FreeRTOS

Кидать через очередь адрес/размер - то ж геморройно. Ибо перед тем как по этому же адресу заполнять новые данные, надо будет ожидать пока этот адрес не уберется из очереди. Или заводить адрес в куче.
Уж лучше буфер завести у передатчика и через неего ....
Boba_spb вне форума  
Непрочитано 09.01.2013, 22:38  
Hives
Гражданин KAZUS.RU
 
Регистрация: 25.11.2010
Сообщений: 516
Сказал спасибо: 1
Сказали Спасибо 126 раз(а) в 109 сообщении(ях)
Hives на пути к лучшему
По умолчанию Re: Вопросник по FreeRTOS

тогда придется реализовывать модель #1, а автору хоцца #2.
Hives вне форума  
 

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

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

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

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


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


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