Например TDA7294

Форум РадиоКот • Просмотр темы - Вопросы по С/С++ (СИ)
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Ср апр 08, 2026 16:52:43

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


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 7704 ]     ... , , , 355, , , ...  
Автор Сообщение
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Сб дек 25, 2021 11:06:08 
Друг Кота
Аватар пользователя

Карма: 50
Рейтинг сообщений: 1400
Зарегистрирован: Пт авг 28, 2009 21:34:30
Сообщений: 7356
Откуда: 845-й км.
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Ищё вопрос про волатильность. Как записать одной строчкой определение двух волатильных указателей. типа
Код:
uint8_t * volatile FRAM_send_ptr;
uint8_t * volatile FRAM_recv_ptr;


Вернуться наверх
 
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Сб дек 25, 2021 12:14:12 
Модератор
Аватар пользователя

Карма: 90
Рейтинг сообщений: 1443
Зарегистрирован: Чт мар 18, 2010 23:09:57
Сообщений: 4614
Откуда: Планета Земля
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Как то так, наверное :roll:
Код:
uint8_t * volatile FRAM_send_ptr, * volatile FRAM_recv_ptr;


Вернуться наверх
 
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Сб дек 25, 2021 12:19:21 
Поставщик валерьянки для Кота

Карма: 20
Рейтинг сообщений: 256
Зарегистрирован: Вс июн 19, 2016 09:32:03
Сообщений: 2089
Рейтинг сообщения: 0
Все будет так же как с обычными указателями:
Код:
uint8_t volatile *FRAM_send_ptr, *FRAM_recv_ptr;


Вернуться наверх
 
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Сб дек 25, 2021 12:26:12 
Модератор
Аватар пользователя

Карма: 90
Рейтинг сообщений: 1443
Зарегистрирован: Чт мар 18, 2010 23:09:57
Сообщений: 4614
Откуда: Планета Земля
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Как вариант:
Код:
typedef uint8_t * volatile      p_u8_volatile_t;

p_u8_volatile_t     FRAM_send_ptr, FRAM_recv_ptr;
:))

Добавлено after 4 minutes 40 seconds:
Все будет так же как с обычными указателями:
Код:
uint8_t volatile *FRAM_send_ptr, *FRAM_recv_ptr;
Мне кажется, или
Код:
uint8_t volatile *
и
Код:
uint8_t * volatile
немного разные вещи ? :roll:


Вернуться наверх
 
Эиком - электронные компоненты и радиодетали
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Сб дек 25, 2021 12:32:16 
Друг Кота
Аватар пользователя

Карма: 50
Рейтинг сообщений: 1400
Зарегистрирован: Пт авг 28, 2009 21:34:30
Сообщений: 7356
Откуда: 845-й км.
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Эта... тогда есть разница? У меня было
Код:
volatile uin8_t *FRAM_send_ptr, *FRAM_recv_ptr;

И эта штука не работала. Потом я вспомнил, что на эти грабли уже наступал... что нужно не указатель на волатильную переменную, а именно волатильный указатель.

Хм... только что проверил
Код:
uint8_t volatile *FRAM_send_ptr, *FRAM_recv_ptr;
- что-то не работает этот вариант.
Спойлер
Код:
Griever>fram_rdsr .
8C
Griever>0 fram_wrsr

Griever>fram_rdsr .
8C
Griever>
В статусный регистр FRAM 0 не записался.



А вариант
Код:
uint8_t * volatile FRAM_send_ptr, * volatile FRAM_recv_ptr;
отработал правильно.

Спойлер
Код:
Griever>fram_rdsr .
8C
Griever>0 fram_wrsr

Griever>fram_rdsr .
0
Griever>
нормально сбросились биты защиты от записи.


Вернуться наверх
 
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Сб дек 25, 2021 12:34:56 
Модератор
Аватар пользователя

Карма: 90
Рейтинг сообщений: 1443
Зарегистрирован: Чт мар 18, 2010 23:09:57
Сообщений: 4614
Откуда: Планета Земля
Рейтинг сообщения: 4
Медали: 1
Получил миской по аватаре (1)
Все спецификаторы, находящиеся до *, относятся к объекту, на который указывает указатель. А те, которые после *, - к самому указателю.
Код:
int const * ptr; // Указатель на константу
int * const ptr; // Константный указатель на переменную
int const * const ptr; // Указатель-константа на константу


Вернуться наверх
 
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Сб дек 25, 2021 12:37:52 
Поставщик валерьянки для Кота

Карма: 20
Рейтинг сообщений: 256
Зарегистрирован: Вс июн 19, 2016 09:32:03
Сообщений: 2089
Рейтинг сообщения: 3
немного разные вещи ?

Конечно, я даже не обратил внимания, параллельно с багом борюсь :) В таком случае проще объявлять переменные отдельно и ничего не выдумывать...


Вернуться наверх
 
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Сб дек 25, 2021 13:00:53 
Друг Кота
Аватар пользователя

Карма: 50
Рейтинг сообщений: 1400
Зарегистрирован: Пт авг 28, 2009 21:34:30
Сообщений: 7356
Откуда: 845-й км.
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Тогда что получается, что в строчке
Код:
uint8_t volatile *FRAM_send_ptr, *FRAM_recv_ptr;

обявляются два не волатильных указателя, только FRAM_send_ptr - указывает на волатильную переменную, а FRAM_recv_ptr - на обычную?


Вернуться наверх
 
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Сб дек 25, 2021 15:26:13 
Модератор
Аватар пользователя

Карма: 90
Рейтинг сообщений: 1443
Зарегистрирован: Чт мар 18, 2010 23:09:57
Сообщений: 4614
Откуда: Планета Земля
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Код:
uint8_t volatile *FRAM_send_ptr, *FRAM_recv_ptr;
Тут volatile относится к типу.

PS:
Код:
[int volatile] [* p1], [* p2];


Вернуться наверх
 
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Сб дек 25, 2021 16:21:27 
Мудрый кот

Карма: -8
Рейтинг сообщений: 196
Зарегистрирован: Вт авг 15, 2017 10:51:13
Сообщений: 1717
Рейтинг сообщения: 0
Код:
uint8_t volatile *FRAM_send_ptr, *FRAM_recv_ptr;

обявляются два не волатильных указателя, только FRAM_send_ptr - указывает на волатильную переменную, а FRAM_recv_ptr - на обычную?
Оба должны указывать на volatile переменную.
В любом случае легко ведь проверить: скомпилить чтение с полной оптимизацией и посмотреть в листинг.


Вернуться наверх
 
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Сб дек 25, 2021 17:06:57 
Модератор
Аватар пользователя

Карма: 90
Рейтинг сообщений: 1443
Зарегистрирован: Чт мар 18, 2010 23:09:57
Сообщений: 4614
Откуда: Планета Земля
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Всё очень просто - спецификаторы можно менять местами, результат будет одинаков.
uint8_t volatile = volatile uint8_t


Вернуться наверх
 
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Ср дек 29, 2021 08:17:13 
Друг Кота
Аватар пользователя

Карма: 50
Рейтинг сообщений: 1400
Зарегистрирован: Пт авг 28, 2009 21:34:30
Сообщений: 7356
Откуда: 845-й км.
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Может, подбросите еще идей. Делаю журналироваие в FRAM. Надумал, что буду сбрасывать следующую информацию:
Код:
    typedef struct data_buffer {
        int16_t setspeedLeft;       // 2
        int16_t setspeedRight;      // 2
        int16_t RealSpeedLeft;      // 2
        int16_t RealSpeedRight;     // 2
        int32_t StepsLeft;          // 4
        int32_t StepsRight;         // 4
        uint32_t Time;              // 4
        uint8_t vbat;
        uint8_t sensors;
    }data_buffer_t;
Ожидалось, что это будет 22 байта на запись, но оказалось, что sizeof() возвращает 24. Похоже что vbat и sensors "выровнены" по четным адресам. Как это упихнуть поплотнее? Я расчитывал, что смогу около 30 секунд записать в 256к (400 записей в секунду), а тут только 27. Вручную OR-ить два байта в 16-битную переменную? Глобальные настройки,типа pack structure, менять нет желания.


Вернуться наверх
 
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Ср дек 29, 2021 08:36:35 
Поставщик валерьянки для Кота

Карма: 20
Рейтинг сообщений: 256
Зарегистрирован: Вс июн 19, 2016 09:32:03
Сообщений: 2089
Рейтинг сообщения: 4
Код:
typedef struct data_buffer {
.....
} __attribute__((packed)) data_buffer_t ;


Вернуться наверх
 
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Ср дек 29, 2021 09:51:35 
Мудрый кот

Карма: -8
Рейтинг сообщений: 196
Зарегистрирован: Вт авг 15, 2017 10:51:13
Сообщений: 1717
Рейтинг сообщения: 0
Для IAR:
Код:
__packed typedef struct data_buffer {
  ...
} data_buffer_t;


Вернуться наверх
 
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Ср дек 29, 2021 10:44:01 
Собутыльник Кота
Аватар пользователя

Карма: 18
Рейтинг сообщений: 432
Зарегистрирован: Вт май 01, 2018 19:44:47
Сообщений: 2562
Рейтинг сообщения: 0
Для IAR:
IAR поддерживает __attribute__((packed)). Стоит использовать его для совместимости между компиляторами.


Вернуться наверх
 
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Ср янв 05, 2022 19:59:38 
Встал на лапы
Аватар пользователя

Зарегистрирован: Пн ноя 04, 2019 09:58:29
Сообщений: 104
Откуда: г. Нижний Тагил Свердл. обл.
Рейтинг сообщения: 0
Добрый вечер. Тут на досуге разбираю по запчастям одного монстра.
class Adafruit_SSD1306 : public Adafruit_GFX {...}
Конструкция подобного вида class AХХХ : public BХХX {...}; Вопрос - повадки, свойства, поведение?
В AtmelStudio компилируется уже без ошибок. Но вызвать в main.cpp пока не получается. Там ещё целая свита хидеров прицеплена. Ни кто их них не буянит. Ардуины нигде нет - все приведено к нормальному С++ :)


Вложения:
123.png [54 KiB]
Скачиваний: 93
Вернуться наверх
 
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Ср янв 05, 2022 20:26:27 
Поставщик валерьянки для Кота

Карма: 20
Рейтинг сообщений: 256
Зарегистрирован: Вс июн 19, 2016 09:32:03
Сообщений: 2089
Рейтинг сообщения: 0
В ошибке говорится, что в классе от которого наследуешься есть чисто виртуальная функцию, которая выглядит как-то так:
Код:
virtual void func() = 0;

Фактически это только объявление, но класс Adafruit_GFX ее вызывает, потому она должна быть определена в Adafruit_SSD1306.


Вернуться наверх
 
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Ср янв 05, 2022 22:04:21 
Встал на лапы
Аватар пользователя

Зарегистрирован: Пн ноя 04, 2019 09:58:29
Сообщений: 104
Откуда: г. Нижний Тагил Свердл. обл.
Рейтинг сообщения: 0
Вот-вот. Такие же подозрения. Полиформизм понимаете ли.. Ну да ладно. Сейчас всё закомментировал. И потихоньку раскомментировываю код. Пустой скелет классов работает и по мере его наполнения с скомпиляцией на каждом этапе можно узнать где собака зарыта. Просто хочу переписать эту библиотеку для голого МК на чистом С++.

Добавлено after 10 minutes 29 seconds:
Да, есть такая!
Код:
// This MUST be defined by the subclass:
   virtual void drawPixel(int16_t x, int16_t y, uint16_t color) = 0;

"Это ДОЛЖНО быть определено подклассом:" (перевод)

Добавлено after 22 minutes 42 seconds:
Подробнее про virtual void func() = 0; тут.(ссылка)


Вложения:
456.png [15.27 KiB]
Скачиваний: 97
Вернуться наверх
 
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Чт янв 06, 2022 22:19:17 
Друг Кота
Аватар пользователя

Карма: 27
Рейтинг сообщений: 33
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Сообщений: 6296
Откуда: Ukraine
Рейтинг сообщения: 0
как элегантней проинициализировать большой массив структур ?
имеется массив структур
каждая структура состоит из 3 полей
перед записью данных я произвожу "обнуление", записывая пробелы, дабы там небыло мусора
Код:

typedef struct{
   char  id[4];   // номер гонщика
   char car[10]; // машина гонщика
   char time[4]; // финишное время
} member_t;


member_t racer[30]; // гонщики

for (int i = 0; i < 29; ++i)
{
   strcpy(racer[i].id, " ");
   strcpy(racer[i].car, " ");
   strcpy(racer[i].time, " ");
}

поскольку поля всего 3 то сделать это легко а как быть если полей за сотню и более ?

_________________
Tell Me The Truth


Вернуться наверх
 
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Чт янв 06, 2022 22:50:18 
Поставщик валерьянки для Кота

Карма: 20
Рейтинг сообщений: 256
Зарегистрирован: Вс июн 19, 2016 09:32:03
Сообщений: 2089
Рейтинг сообщения: 0
Странное у тебя обнуление, строка содержащая один пробел - это типа аналог пустой строки?


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 7704 ]     ... , , , 355, , , ...  

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


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

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


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y