Портал для радиолюбителей и разработчиков электроники · с 2003 годаРеклама на сайте
Найти компонент, схему или даташит

Даташиты, справочник отечественных приборов, схемы с разбором и живой форум


 
Опции темы

Пишем свое API

Непрочитано 20.06.2015, 23:10  
picavr
Почётный гражданин KAZUS.RUN
 
Аватар для picavr
 
Регистрация: 07.10.2007
Адрес: Луганск
Сообщений: 1,815
Сказал спасибо: 13
Сказали Спасибо 399 раз(а) в 214 сообщении(ях)
picavr на пути к лучшему
По умолчанию Re: Пишем свое API

Сообщение от Easyrider83 Посмотреть сообщение
Продолжение следует...
ну что там с продолжением? )))
Реклама:
__________________
"picavr(ГАВ)мыло.ру" USB_Analyzer, Digital_Storage_Oscilloscope "picavr.kr1.ru" заказы в Китай компонентов/изготовление: плат/ЖКИ/мембраных клавиатур/имп трансформаторов
picavr вне форума  
Непрочитано 21.06.2015, 01:04  
Easyrider83
Гуру портала
 
Аватар для Easyrider83
 
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,821
Сказал спасибо: 919
Сказали Спасибо 4,289 раз(а) в 2,570 сообщении(ях)
Easyrider83 на пути к лучшему
По умолчанию Re: Пишем свое API

Отпуск кончился, теперь трудовыебудни )) не успеваю. А чего теперь писать будем? Progress bar? Окно с элементами управления?
Easyrider83 вне форума  
Непрочитано 21.06.2015, 01:07  
Kabron
Почётный гражданин KAZUS.RUN
 
Аватар для Kabron
 
Регистрация: 12.11.2004
Адрес: Москва
Сообщений: 8,850
Сказал спасибо: 721
Сказали Спасибо 4,537 раз(а) в 2,072 сообщении(ях)
Kabron на пути к лучшему
По умолчанию Re: Пишем свое API

Сообщение от Easyrider83 Посмотреть сообщение
трудовыебудни
Звучит задорно и многообещающе, надо взять на вооружение. А без трудо ваще зловеще. Похоже на специфику работы некоторых дам. Новый вклад в народное творчество.
Поразмыслим на выеходных.
__________________
33Й ДАН БАНА
Я не помогаю. Я провоцирую думать.
Не дай вам Бог плохих контактов.

Последний раз редактировалось Kabron; 21.06.2015 в 01:18.
Kabron вне форума  
Сказали "Спасибо" Kabron
Sukhanov (21.08.2015)
Непрочитано 21.06.2015, 19:17  
picavr
Почётный гражданин KAZUS.RUN
 
Аватар для picavr
 
Регистрация: 07.10.2007
Адрес: Луганск
Сообщений: 1,815
Сказал спасибо: 13
Сказали Спасибо 399 раз(а) в 214 сообщении(ях)
picavr на пути к лучшему
По умолчанию Re: Пишем свое API

Сообщение от Easyrider83 Посмотреть сообщение
Progress bar? Окно с элементами управления?
думаю окошко более полезно?
__________________
"picavr(ГАВ)мыло.ру" USB_Analyzer, Digital_Storage_Oscilloscope "picavr.kr1.ru" заказы в Китай компонентов/изготовление: плат/ЖКИ/мембраных клавиатур/имп трансформаторов
picavr вне форума  
Непрочитано 20.08.2015, 00:11  
Easyrider83
Гуру портала
 
Аватар для Easyrider83
 
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,821
Сказал спасибо: 919
Сказали Спасибо 4,289 раз(а) в 2,570 сообщении(ях)
Easyrider83 на пути к лучшему
По умолчанию Re: Пишем свое API

Итак, я решил продолжить. С новыми элементами API пока притормозим, но не много времени уделим FreeRTOS. Зачем нам операционка, скажете вы? Дело в том, что те задачи, которые раньше требовали от нас кучу терпения и ресурсов теперь делается легко и быстро. Простой пример - вывод информации на дисплей. Дело в том, что доступ к дисплею может иметь несколько процессов. И каждый из них должен как-то легко и просто выбросить информацию на дисплей и не дожидаясь, пока она будет отрисована, завершиться. Как сделать одновременный доступ к ресурсам без применения RTOS? Можно, конечно, через кольцевой или двойной буфер, но это груда кода. А здесь - пара строчек.
Итак, мы будем выводить текст. Для этого нам понадобится некая элементарная структура. Позже мы будем передавать сам элемент API, а пока ограничимся элементарной структурой.
Код:
typedef struct
{
	u16 XStart; //начальные координаты по х и у
	u16 YStart;
	u16 Color; //цвет текста
	u16 BackColor; //цвет фона
	char Text[20]; //сам текст, не более 20 символов
}LCD_DataTypeDef;
И локально задекларируем очередь:
Код:
QueueHandle_t LCD_Queue;
Инитиализируем контроллер и таски:
Код:
int main ()
{
	stm32_Init();
	xTaskCreate( vInitTask, "InitTask", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY + 5 , NULL);
	xTaskCreate( vLEDTask,  "LED Task", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY + 3 , NULL);
	vTaskStartScheduler();	
	return 0;
}
Собственно, сам таск, который инитиазирует переферию и, чтобы принести еще не много пользы, будет выбрасывать информацию на дисплей.
Код:
void vInitTask(void * pvArg)
{
	LCD_Initializtion();
	LCD_BackLight_Init();	  
  LCD_Clear(Blue);
	LCD_Queue = xQueueCreate(10, sizeof(struct LCD_DataTypeDef *) + 20);
	xTaskCreate( vLCD_HandleThread,  "LCD Thread", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY + 1 , NULL);
	//vTaskDelete( NULL );	// этой командой мы убиваем таск и освобождаем память
	while(1)
	{
		static LCD_DataTypeDef LCD_Data = {120, 0, Green, Black, "BYE WORLD"};
		if (LCD_Queue) xQueueSend(LCD_Queue, &LCD_Data, 0);
		if (LCD_Data.YStart ‹ 300) LCD_Data.YStart += 16;	
		vTaskDelay(630);
	}
}
А этим таском будем мигать диодом и тоже выбрасывать информацию на дисплей:
Код:
void vLEDTask(void * pvArg)
{  	
  while(1)
  {
		static LCD_DataTypeDef LCD_Data = {0, 0, Red, Black, "HALLO WORLD"};
		if (LCD_Queue) xQueueSend(LCD_Queue, &LCD_Data, 0);
		if (LCD_Data.YStart ‹ 300) LCD_Data.YStart += 16;
		vTaskDelay(520);	
		
		PIN_INV(PB0);
  }
}
Как легко догадаться, командой xQueueSend мы заполняем очередь новыми элементами. Ну и собственно сборщик информации из очереди:
Код:
void vLCD_HandleThread (void * pvArg)
{
	LCD_DataTypeDef LCD_Data;
	while(1)
	{
		xQueueReceive(LCD_Queue, &LCD_Data, 0);
		GUI_Text(LCD_Data.XStart, LCD_Data.YStart, LCD_Data.Text, LCD_Data.Color, LCD_Data.BackColor);
		vTaskDelay(10);
	}
}
Вопросы сюда. Проект тут.
Easyrider83 вне форума  
Сказали "Спасибо" Easyrider83
-shiva- (22.08.2015)
Непрочитано 20.08.2015, 00:51  
Boba_spb
Почётный гражданин KAZUS.RUN
 
Регистрация: 08.06.2008
Сообщений: 1,393
Сказал спасибо: 4
Сказали Спасибо 183 раз(а) в 167 сообщении(ях)
Boba_spb на пути к лучшему
По умолчанию Re: Пишем свое API

Сообщение от Easyrider83 Посмотреть сообщение
GUI_Text(LCD_Data.XStart, LCD_Data.YStart, LCD_Data.Text, LCD_Data.Color, LCD_Data.BackColor);
Как-то не кошерно это;
Сделать GUI_Text(&LCD_Data) - это более по-взрослому;
Boba_spb вне форума  
Непрочитано 20.08.2015, 01:02  
Easyrider83
Гуру портала
 
Аватар для Easyrider83
 
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,821
Сказал спасибо: 919
Сказали Спасибо 4,289 раз(а) в 2,570 сообщении(ях)
Easyrider83 на пути к лучшему
По умолчанию Re: Пишем свое API

Сообщение от Boba_spb Посмотреть сообщение
Как-то не кошерно это;
Сделать GUI_Text(&LCD_Data) - это более по-взрослому;

Да, но нет
Давайте не уходить от темы.
Easyrider83 вне форума  
Непрочитано 20.08.2015, 01:37  
Easyrider83
Гуру портала
 
Аватар для Easyrider83
 
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,821
Сказал спасибо: 919
Сказали Спасибо 4,289 раз(а) в 2,570 сообщении(ях)
Easyrider83 на пути к лучшему
По умолчанию Re: Пишем свое API

Сообщение от Boba_spb Посмотреть сообщение
Вы ж молодежь учите !
А как-то кривовато все. Тут, например YStart - всегда будет равно 16. И будет ученик репу чесать, что эт текст по экрану не двигается? И будет думать, что чего эт текст в 0 позиции не был, а сразу на 16 да и там замер.

Будьте внимательнее - они и так плохо учатся сейчас, а Вы еще их к ошибкам приучаете.
Смотрите внимательнее. Переменная типа static. Текст движется.
Чего здесь реально не правильно сделано - это нет проверки готовности данных в очереди:
Код:
if (xQueueReceive(LCD_TextQueue, &LCD_TextData, 0) == pdTRUE)
			GUI_Text(LCD_TextData.XStart, LCD_TextData.YStart, LCD_TextData.Text, LCD_TextData.Color, LCD_TextData.BackColor);

Последний раз редактировалось Easyrider83; 20.08.2015 в 01:45.
Easyrider83 вне форума  
Непрочитано 20.08.2015, 02:18  
Boba_spb
Почётный гражданин KAZUS.RUN
 
Регистрация: 08.06.2008
Сообщений: 1,393
Сказал спасибо: 4
Сказали Спасибо 183 раз(а) в 167 сообщении(ях)
Boba_spb на пути к лучшему
По умолчанию Re: Пишем свое API

Ну да static - прошу пардона

Последний раз редактировалось Boba_spb; 20.08.2015 в 02:32.
Boba_spb вне форума  
Непрочитано 21.08.2015, 14:17  
Easyrider83
Гуру портала
 
Аватар для Easyrider83
 
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,821
Сказал спасибо: 919
Сказали Спасибо 4,289 раз(а) в 2,570 сообщении(ях)
Easyrider83 на пути к лучшему
По умолчанию Re: Пишем свое API

хм.... эта тема вообще кому-нибудь интересна?
Easyrider83 вне форума  
 
Опции темы

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
свое USB устройство ESWANT Микроконтроллеры, АЦП, память и т.д 2 08.09.2009 14:58


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


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.