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

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

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

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

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

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


 
Опции темы
Непрочитано 23.12.2015, 23:12  
AJScorp
Почётный гражданин KAZUS.RU
 
Аватар для AJScorp
 
Регистрация: 10.05.2005
Адрес: Саратов.ru
Сообщений: 1,548
Сказал спасибо: 384
Сказали Спасибо 737 раз(а) в 417 сообщении(ях)
AJScorp на пути к лучшему
По умолчанию Re: Пишем свое API

Easyrider83, Можно эти дела распараллелить. Фишка в том, что GUI это GUI, а от драйвера для связки нужны только отдельные функции. Не нужно мешать мягкое с тёплым.
Реклама:
AJScorp вне форума  
Непрочитано 24.12.2015, 10:51  
SasaVitebsk
Гражданин KAZUS.RU
 
Регистрация: 04.08.2006
Сообщений: 911
Сказал спасибо: 28
Сказали Спасибо 180 раз(а) в 139 сообщении(ях)
SasaVitebsk на пути к лучшему
По умолчанию Re: Пишем свое API

Спасибо автору топика. Он выложил свои наработки и обозначил свой взгляд на вещи.
Я думаю, что он, безусловно, упрощает, для примера. Чтобы нагляднее было.
Мне очень понравился подход Microchip. Ну такой... классический... объектный. Тут смысл не в реализации конкретного виджета, а именно в построении самого ГУИ. Например фокус объекта, перебор, лист... Это, к примеру позволяет организовать работу как на основе кнопок, так и тачскрин применить. Позволяет сохранять экраны, листать их и так далее...
Вложения:
Тип файла: zip Graphics Library Help.zip (2.55 Мб, 60 просмотров)
SasaVitebsk вне форума  
Непрочитано 15.05.2016, 21:01  
Easyrider83
Гуру портала
 
Аватар для Easyrider83
 
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
Easyrider83 на пути к лучшему
По умолчанию Re: Пишем свое API

Всем привет!
И вот мне самому понадобилась помощь. Не могу преобразовать типы. Проблема такая - есть функция:
Код:
I2C_Result I2C__Read_Page     (unsigned char I2c_Address, 
                               unsigned char Mem_Address, 
                               unsigned char * pBuffer, 
                               unsigned char pBufferSize);
Как видно, возвращает она тип enum:
Код:
typedef enum {
    I2C_SUCCESS = 0,
    I2C_TIMEOUT,
    I2C_ERROR,
    I2C_BUS_BUSY,
    I2C_ACK_OK,
    I2C_ACK_NOT_OK,
    I2C_ADD_NOT_EXIST
} I2C_Result;
Все работает как надо, но понадобилось использовать этот драйвер с датчиком, у которого конфигурация описана так:
Код:
typedef struct
{
  unsigned char I2C_Address;
  unsigned char (* I2C_SeqRead) (unsigned char I2c_Address, 
                                 unsigned char Mem_Address, 
                                 unsigned char * pBuffer, 
                                 unsigned char pBufferSize);
  unsigned char (* I2C_SeqWrite)(unsigned char I2c_Address, 
                                 unsigned char Mem_Address, 
                                 unsigned char * pBuffer, 
                                 unsigned char pBufferSize);
}BME280_InitStructTypeDef;
Так вот компилятор, разумеется, не дает напрямую состыковать два разных типа:
Код:
BME280_InitStruct-›I2C_SeqRead = I2C__Read_Page;
Цитата:
Error[Pe513]: a value of type "I2C_Result (*)(unsigned char, unsigned char, unsigned char *, unsigned char)" cannot be assigned to an entity of type "unsigned char (*)(unsigned char, unsigned char, unsigned char *, unsigned char)"
Надо преобразовать тип. Но ума не приложу, как это оформить.
Easyrider83 вне форума  
Непрочитано 15.05.2016, 22:03  
AR_Favorit
Почётный гражданин KAZUS.RU
 
Регистрация: 13.03.2010
Сообщений: 2,897
Сказал спасибо: 498
Сказали Спасибо 3,061 раз(а) в 1,425 сообщении(ях)
AR_Favorit на пути к лучшему
По умолчанию Re: Пишем свое API

Сообщение от Easyrider83 Посмотреть сообщение
Надо преобразовать тип. Но ума не приложу, как это оформить.
Может, просто так?

Код:
BME280_InitStruct.I2C_SeqRead = &I2C__Read_Page;
Что по идее аналогично

Код:
unsigned char (* p) (unsigned char I2c_Address, 
                                 unsigned char Mem_Address, 
                                 unsigned char * pBuffer, 
                                 unsigned char pBufferSize);	
p = &I2C__Read_Page;																 
BME280_InitStruct.I2C_SeqRead = p;
Хотя эту фигню с указателями на функции сам плохо знаю и потому не люблю

Последний раз редактировалось AR_Favorit; 15.05.2016 в 22:05.
AR_Favorit вне форума  
Непрочитано 15.05.2016, 23:49  
Easyrider83
Гуру портала
 
Аватар для Easyrider83
 
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
Easyrider83 на пути к лучшему
По умолчанию Re: Пишем свое API

AR_Favorit, увы!
Easyrider83 вне форума  
Непрочитано 16.05.2016, 00:05  
AR_Favorit
Почётный гражданин KAZUS.RU
 
Регистрация: 13.03.2010
Сообщений: 2,897
Сказал спасибо: 498
Сказали Спасибо 3,061 раз(а) в 1,425 сообщении(ях)
AR_Favorit на пути к лучшему
По умолчанию Re: Пишем свое API

Easyrider83, не работает - или не компилится? Кейл у меня оба варианта принимает без ругани...

А, дошло, у меня обращение к самой структуре, а не к указателю на нее...

Но через указатель тоже не выдает ошибки.

Код:
BME280_InitStructTypeDef *p;
p=&BME280_InitStruct;
p-›I2C_SeqRead = I2C__Read_Page;

Последний раз редактировалось AR_Favorit; 16.05.2016 в 01:00.
AR_Favorit вне форума  
Непрочитано 16.05.2016, 23:49  
Easyrider83
Гуру портала
 
Аватар для Easyrider83
 
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
Easyrider83 на пути к лучшему
По умолчанию Re: Пишем свое API

AR_Favorit, нет разницы. Вы создаете указатель на структуру, но структура остается той же. Ошибка та же. Преобразование типа отсутствует.
Easyrider83 вне форума  
Непрочитано 17.05.2016, 00:29  
Ar-Gen-Tum
Почётный гражданин KAZUS.RU
 
Регистрация: 19.10.2010
Сообщений: 1,752
Сказал спасибо: 158
Сказали Спасибо 640 раз(а) в 364 сообщении(ях)
Ar-Gen-Tum на пути к лучшему
По умолчанию Re: Пишем свое API

Тип указателя принципиально не совместим с типом возвращаемого результата.
Результат типа unsigned char - это по сути байт (8 бит), а указатель - это адрес ячейки памяти,
где лижит этот байт.
Тип enum - это перечислимый тип, который можно привести к типу unsigned char - (unsigned char)I2C_Result .
Одна функция возвращает собственно результат (вероятно в регистре-аккумуляторе),
а другая функция возвращает указатель на результат, который лежит в ячейке памяти.
Что-бы совместить эти функции, надо чтобы вторая вернула собственно результат.
Возможно надо разыменовывать указатель ...
Ar-Gen-Tum вне форума  
Непрочитано 17.05.2016, 00:45  
omercury
Почётный гражданин KAZUS.RU
 
Аватар для omercury
 
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
omercury на пути к лучшему
По умолчанию Re: Пишем свое API

Смотрю я на этот птичий язык и приходит в голову такая странная мысль - I2C_Result возвращала статус IIC, а BME280 этого не делает. Полагаю, надо обернуть BME аналогичным первому случаю образом, пусть хотя бы отвечает, что транзакция прошла успешно.
omercury вне форума  
Непрочитано 17.05.2016, 01:23  
Ar-Gen-Tum
Почётный гражданин KAZUS.RU
 
Регистрация: 19.10.2010
Сообщений: 1,752
Сказал спасибо: 158
Сказали Спасибо 640 раз(а) в 364 сообщении(ях)
Ar-Gen-Tum на пути к лучшему
По умолчанию Re: Пишем свое API

Сообщение от omercury Посмотреть сообщение
Смотрю я на этот птичий язык и приходит в голову такая странная мысль - I2C_Result возвращала статус IIC, а BME280 этого не делает. Полагаю, надо обернуть BME аналогичным первому случаю образом, пусть хотя бы отвечает, что транзакция прошла успешно.
В первом случае определена функция, возвращающая результат.
А во втором случае имеется структура, содержащая поле данных
и два указателя на методы. Самих методов структура не содержит.
При создании экземпляра структуры, полям методов надо присвоить указатели на соответствующие функции.
Значит, надо написать собственную функцию, которая будет вызывать первую функцию,
результат типа enum приводить к типу unsigned char, записывать результат в память
и возвращать указатель на него.
И уже эту функцию присваивать полю метода в экземпляре структуры.
Тогда они должны совместиться.
Ar-Gen-Tum вне форума  
 

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

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

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

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

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


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


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