Easyelectronics.ru • Просмотр темы - Унифицированная кросс-платформенная библиотека Си

Easyelectronics.ru

Электроника для всех
Текущее время: 20 авг 2018, 09:37

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



    • JLCPCB - Прототипы 10 PCBs всего за 2$ (100*100mm, 2-layer)
    • Как мы делаем платы, смотрите на YouTube
    • Крупнейшая китайская фабрика прототипов. 300000+ заказчиков и 10000+ заказов в день!
    • LCSC - Крупнейший китайский онлайн магазин комплектующих.

Начать новую тему Ответить на тему  [ Сообщений: 407 ]  На страницу Пред.  1 ... 13, 14, 15, 16, 17  След.
Автор Сообщение
 Заголовок сообщения: Re: Унифицированная кросс-платформенная библиотека Си
СообщениеДобавлено: 12 окт 2017, 19:24 
Только пришел

Зарегистрирован: 03 сен 2017, 22:47
Сообщения: 20
C++ и шаблоны для микроконтроллеров это уже само по себе не просто для многих

просто должно быть в использовании


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Унифицированная кросс-платформенная библиотека Си
СообщениеДобавлено: 12 окт 2017, 19:35 
Старожил

Зарегистрирован: 20 мар 2013, 11:27
Сообщения: 5077
спасибо, но мне здесь не общие слова интересны, а ответы на вопросы

не любят почему то компиляторы специальные атрибуты в классах
может быть нужно static использовать?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Унифицированная кросс-платформенная библиотека Си
СообщениеДобавлено: 12 окт 2017, 19:41 
Старожил

Зарегистрирован: 20 мар 2013, 11:27
Сообщения: 5077
эврика! как только задумался о том, что атрибуты это директива линкеру для размещения понял, что с нестатичными полями это не возможно, а со статичными должно быть возможно
и компиляция работает
осталось проверить работает ли код как надо

AVR:
Код:
      template <typename T, int index>
      class EEPROM {
         static EEMEM T data;
      };
      template <typename T, int index>
      T EEPROM<T, index>::data;

      EEPROM<int, 0> test1;


IAR:
Код:
      template <typename T, int index>
         class EEPROM {
            static __eeprom T data;
         };
      template <typename T, int index>
         T EEPROM<T, index>::data;

      EEPROM<int, 0> test1;


есть правда минус - нужно самому за индексами таких данных следить


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Унифицированная кросс-платформенная библиотека Си
СообщениеДобавлено: 12 окт 2017, 20:47 
Только пришел

Зарегистрирован: 03 сен 2017, 22:47
Сообщения: 20
посмотрите это
http://we.easyelectronics.ru/Soft/avr-s ... ateli.html

а может не стоит всё засовывать в шаблоны, ваш код не даёт никаких преимуществ перед просто строкой
__eeprom int data;
только вносит дополнительные трудности добавляя индексы

Может сделать упор на то, что данные могут храниться как в eeprom, так и в 24Сxx, 93Cxx и т.д. А в класс передавать тип и место хранения (класс способа доступа к памяти)?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Унифицированная кросс-платформенная библиотека Си
СообщениеДобавлено: 12 окт 2017, 21:18 
Старожил

Зарегистрирован: 20 мар 2013, 11:27
Сообщения: 5077
Спасибо
Статью по ссылке читал

Мне хотелось бы иметь простой и универсальный код


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Унифицированная кросс-платформенная библиотека Си
СообщениеДобавлено: 23 окт 2017, 11:27 
Старожил

Зарегистрирован: 20 мар 2013, 11:27
Сообщения: 5077
Забавно кто то копирует темы с форума слово в слово под какими то выдумаными никами http://www.cyberforum.ru/electronics/thread2105638.html


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Унифицированная кросс-платформенная библиотека Си
СообщениеДобавлено: 23 окт 2017, 13:16 
Заглядывает иногда

Зарегистрирован: 15 ноя 2015, 12:11
Сообщения: 101
axill писал(а):
под какими то выдумаными никами

Ники вроде те-же, только "шепеляво" написаны:
a -> o
i -> y
l -> t
e -> i
c-> s
n -> m
Контент воруют, инкрустируют свою рекламку каждым пятым сообщением, копеечку имеют, копьё кармы им промеж лопаток.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Унифицированная кросс-платформенная библиотека Си
СообщениеДобавлено: 23 окт 2017, 13:35 
Старожил
Аватара пользователя

Зарегистрирован: 20 май 2013, 22:29
Сообщения: 230
А дополнительные ссылки с профильных форумов повышают их в глазах поисковиков. Так что я бы ссылки прямые не давал тут


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Унифицированная кросс-платформенная библиотека Си
СообщениеДобавлено: 23 окт 2017, 20:07 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 23 мар 2012, 16:18
Сообщения: 146
Сообщения транслируются с разницей в 1-2 дня. Т.е., если это не договоренность, то надо написать, что:
<section>
Сyberforum - без разрешения транслирует сообщения на свой ресурс.
Правильный источник - forum.easyelectronics.ru.
</section>
И пусть индексируется.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Унифицированная кросс-платформенная библиотека Си
СообщениеДобавлено: 23 окт 2017, 21:13 
Старожил
Аватара пользователя

Зарегистрирован: 11 апр 2016, 18:04
Сообщения: 1175
Откуда: Китай, Пекин
axill писал(а):
Забавно кто то копирует темы с форума слово в слово под какими то выдумаными никами

как будто это что то плохое... ;)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Унифицированная кросс-платформенная библиотека Си
СообщениеДобавлено: 23 окт 2017, 22:31 
Старожил

Зарегистрирован: 20 мар 2013, 11:27
Сообщения: 5077
cheblin писал(а):
как будто это что то плохое... ;)

мне не жалко, но по отношению к форуму это плагиат и воровство причем с коммерческим интиресом
вообще то это наказуемо


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Унифицированная кросс-платформенная библиотека Си
СообщениеДобавлено: 31 окт 2017, 20:04 
Старожил

Зарегистрирован: 20 мар 2013, 11:27
Сообщения: 5077
насколько ужасно возвращать из функции структуру?
например при описании FIFO в методе Pop надо вернуть данные
если это простой тип то вопросов нет - можно прям как значение
а если тип это структура? в моем случае это может быть например 20 байт

возвращение референса имеет свои проблемы
в случае с буфером это будет референс на особожденную ячейку буфера которая в любой момент может быть затерта


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Унифицированная кросс-платформенная библиотека Си
СообщениеДобавлено: 31 окт 2017, 20:28 
Старожил

Зарегистрирован: 23 янв 2016, 15:37
Сообщения: 611
Посмотри стандартные контейнеры, типа vector, там pop только удаляет, а front/back возвращают константную ссылку.
Кстати, наконец вышел gcc 7.2 для ARM...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Унифицированная кросс-платформенная библиотека Си
СообщениеДобавлено: 01 ноя 2017, 11:06 
Старожил

Зарегистрирован: 20 мар 2013, 11:27
Сообщения: 5077
Спасибо. Переделал на два разных метода
Но пришлось убрать volatile у массива элементов
Если правильно понимаю, то он там и не нужен, по логике работы буфера пока элемент не удален в другом потоке он не может быть изменен

Для стм32 пока использую кейл

Описал стандартный подход к хранению в еепром для стм8 и авр
Есть ли компактный рабочий пример виртуального еепром на базе флэш для стм32?

П.с еще забавная тема байт ордер. Он разный для стм и авр. Выбрал базовым ордер стм, для авр при необходимости совместимости требуется трансляция


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Унифицированная кросс-платформенная библиотека Си
СообщениеДобавлено: 01 ноя 2017, 13:07 
Старожил

Зарегистрирован: 23 янв 2016, 15:37
Сообщения: 611
axill писал(а):
Но пришлось убрать volatile у массива элементов
Если правильно понимаю, то он там и не нужен, по логике работы буфера пока элемент не удален в другом потоке он не может быть изменен

Я написал один универсальный контейнер, аналог deque фиксированного размера, volatile там только пара указателей на начало и конец и то опционально, их тип передается третьим параметром.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Унифицированная кросс-платформенная библиотека Си
СообщениеДобавлено: 01 ноя 2017, 14:40 
Старожил
Аватара пользователя

Зарегистрирован: 29 янв 2010, 15:41
Сообщения: 1125
Откуда: Германия
axill писал(а):
П.с еще забавная тема байт ордер. Он разный для стм и авр. Выбрал базовым ордер стм, для авр при необходимости совместимости требуется трансляция

Именно порядок байт не может быть разным - оба процессора - little endian. Выравнивание - да, разное. В AVR - выравнивание на 1 байт, а в STM32 на 4 байта, но лечится всякими pragma в keil'е или attibute в GCC, но замедляет работу с данными.

_________________
Мои поделки
http://www.fun-electronic.net/


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Унифицированная кросс-платформенная библиотека Си
СообщениеДобавлено: 01 ноя 2017, 15:59 
Старожил

Зарегистрирован: 20 мар 2013, 11:27
Сообщения: 5077
порядок у stm8 и у avr8 разные, знаю доподлинно, уже писал связку
стм32 еще не пробовал, но было бы странно если бы стм сделал бы разный порядок

насвет выравнивания - честно говорая не понимаю на что это влияет
если беру структуру данных там данные располагаются без зазоров, байт к байту


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Унифицированная кросс-платформенная библиотека Си
СообщениеДобавлено: 01 ноя 2017, 16:25 
Старожил

Зарегистрирован: 23 янв 2016, 15:37
Сообщения: 611
axill писал(а):
насвет выравнивания - честно говорая не понимаю на что это влияет
если беру структуру данных там данные располагаются без зазоров, байт к байту

Допустим нужно прочесть невыровненное значение типа int, значит мк придется сделать два выровненных чтения и объединить результаты, а это несколько лишних тактов, причем эта операция атомарная и если где-то еще работает DMA на максимальной скорости, то может быть лаг, или прерывания от таймера чуть запоздает. То и другое может иметь значение когда, например, генерят видеосигнал.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Унифицированная кросс-платформенная библиотека Си
СообщениеДобавлено: 01 ноя 2017, 16:30 
Старожил

Зарегистрирован: 20 мар 2013, 11:27
Сообщения: 5077
за вырвниванием следит компилятор? т.е. если приходится читать многобайтовое значение компилятор должен сгенерить ассемблер исходя их того соотвествует выравнивание нужному или нет?

ну в этом смысле любая struct ведет к тому, что часть данных будет выровнена, часть нет


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Унифицированная кросс-платформенная библиотека Си
СообщениеДобавлено: 01 ноя 2017, 17:56 
Старожил

Зарегистрирован: 20 мар 2013, 11:27
Сообщения: 5077
покурил яндекс
выходит стм8 big endian, stm32 и avr8 - little

так или я что то напутал?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Унифицированная кросс-платформенная библиотека Си
СообщениеДобавлено: 01 ноя 2017, 20:56 
Старожил
Аватара пользователя

Зарегистрирован: 29 янв 2010, 15:41
Сообщения: 1125
Откуда: Германия
axill писал(а):
за вырвниванием следит компилятор? т.е. если приходится читать многобайтовое значение компилятор должен сгенерить ассемблер исходя их того соотвествует выравнивание нужному или нет?

Ага. Следит компилятор.
Если поле данных с размером больше 1 байта (WORD, DWORD) не выравнено, то компилятор "строит" обвязку такого чтения, вместо того, чтоб использовать одну команду.
Но это всё приколы архитектур разрядностью больше 8ми бит. На AVR ках и на STM8 этим можно не заморачиваться, этого там нет.
А вот на 16 ти битных (например MSP480 был такой, я его пользовал), да на всех ARMах последних, такое встает в полный рост и обычно приводит к хитрым проблемам. У ARM есть битик настройки, который либо запрещает (по умолчанию после старта), либо разрешает доступ к невыравненным данным. И если запрет стоит, а обращение идет (если компилятор туп, и не сделал той самой обвязки а просто тупо сгенерил одну команду на чтение, адрес к которой должен быть выравнен, но в реале - нет), то все падает в аборт хэндлер.
Такое обычно выпадает в случаях, когда указатель на данные передается в функции через тип void *, и потом "кастится". Тут компилятор тупо не знает, как надо выравнивать данные, и выпадает в осадок.
Мы такого наелись, когда программили TI AM3515 ARM9 проц.

axill писал(а):
ну в этом смысле любая struct ведет к тому, что часть данных будет выровнена, часть нет

Это все ведет к тому, что на архитектурах больше 8ми бит ВСЕ поля будут выравнены, если не сказать компилятору, что этого делать не надо.

_________________
Мои поделки
http://www.fun-electronic.net/


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Унифицированная кросс-платформенная библиотека Си
СообщениеДобавлено: 01 ноя 2017, 21:17 
Старожил

Зарегистрирован: 20 мар 2013, 11:27
Сообщения: 5077
Если в кейле не замретить выравнивание структуры то она «расползется»?
Как запретить? Для передачи данных критично


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Унифицированная кросс-платформенная библиотека Си
СообщениеДобавлено: 01 ноя 2017, 21:30 
Старожил
Аватара пользователя

Зарегистрирован: 26 окт 2013, 07:58
Сообщения: 1865
axill писал(а):
за вырвниванием следит компилятор? т.е. если приходится читать многобайтовое значение компилятор должен сгенерить ассемблер исходя их того соотвествует выравнивание нужному или нет?

ну в этом смысле любая struct ведет к тому, что часть данных будет выровнена, часть нет


Код:
#pragma pack(push, 1)
struct PackageDetails
{
   PackageDetails(uint16_t id, uint8_t ack = 0, uint16_t ttl = 0) :
      packageId(id),
      TTL(ttl),
      needAck(ack)
   {}

   PackageDetails()
   {
      TTL = 0;
      needAck = 0;
   }

   PackageId packageId;
   uint8_t TTL : 7;
   uint8_t needAck : 1;
};
#pragma pack(pop)


С GCC работает.
И нет проблем с сереализацией данных.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Унифицированная кросс-платформенная библиотека Си
СообщениеДобавлено: 01 ноя 2017, 21:37 
Старожил
Аватара пользователя

Зарегистрирован: 29 янв 2010, 15:41
Сообщения: 1125
Откуда: Германия
Pingvin писал(а):
axill писал(а):
за вырвниванием следит компилятор? т.е. если приходится читать многобайтовое значение компилятор должен сгенерить ассемблер исходя их того соотвествует выравнивание нужному или нет?

ну в этом смысле любая struct ведет к тому, что часть данных будет выровнена, часть нет


Код:
#pragma pack(push, 1)
struct PackageDetails
{
   PackageDetails(uint16_t id, uint8_t ack = 0, uint16_t ttl = 0) :
      packageId(id),
      TTL(ttl),
      needAck(ack)
   {}

   PackageDetails()
   {
      TTL = 0;
      needAck = 0;
   }

   PackageId packageId;
   uint8_t TTL : 7;
   uint8_t needAck : 1;
};
#pragma pack(pop)


С GCC работает.
И нет проблем с сереализацией данных.


Насколько я помню, GCC таких pragma не понимает (по крайней мере версия 5.4). Там надо attribute писать:

typedef struct {
...
} __attribute__((packed)) TypeName;
а те pragma pack для keil и iar.

_________________
Мои поделки
http://www.fun-electronic.net/


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Унифицированная кросс-платформенная библиотека Си
СообщениеДобавлено: 02 ноя 2017, 11:03 
Старожил

Зарегистрирован: 20 мар 2013, 11:27
Сообщения: 5077
Спасибо
Эх, без препроцессора не обойтись) с++ даже современный против pragma и attribute бессилен

Для выровненной структуры sizeof вернет фактически занятый размер или такой же как для упакованных данных?


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 407 ]  На страницу Пред.  1 ... 13, 14, 15, 16, 17  След.

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


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

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


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

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

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