Вопросы по С/С++ (СИ)

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Ответить
Собутыльник Кота
Аватара пользователя
Сообщения: 2567
Зарегистрирован: Вт май 01, 2018 19:44:47

Сообщение VladislavS »

Таксь, загибаем пальцы что нельзя на С++ : кварц нельзя, GPIO со светодиодами нельзя, USB нельзя. DMA, как я понял, тоже нельзя? Может сразу перечислите что можно и не будем мучаться?

Заменил пример на классическую макросовскую залипуху.
Изображение
изображение_2022-12-25_112312443.png
(60.87 КБ) 618 скачиваний
СпойлерА почему у вас такой интерес к скромной персоне неудачника у которого ничего нет, что вы за мной 6 лет по всем форумам носитесь? Я за это время не припомню, чтобы где-то вам задолжал и стал обязан свои проекты выкладывать. Выкладывайте свои, бедем смотреть а кто же судьи. А чтобы сообщения не удаляли надо всего лишь правила форума соблюдать.
Последний раз редактировалось VladislavS Вс дек 25, 2022 11:24:51, всего редактировалось 3 раза.
Реклама
Опытный кот
Аватара пользователя
Сообщения: 848
Зарегистрирован: Ср авг 03, 2022 05:22:56

Сообщение MLX90640 »

Ну это у всех так бывает :) У меня тоже есть навалом незавершенных и заброшенных проектов, которые потеряли актуальность или были ошибочными. Это нормально. Но есть немало и конечных продуктов, причем независимо от языка их написания. 18 лет назад у меня были конечные продукты даже на ассемблере, и ничо, норм. Как бы цель то в том, что бы делать конечный продукт, а не работу ради работы. По-моему, так.

VladislavS, ну это опять-двацатьпять, хеллоуворлд. VladislavS - типичный представитель хеллоуворлдщиков. Есть такая каста пейсателей. Ни одного законченного осмысленного проекта, но тысячи хеллоуворлдов на протяжении многих лет. Уж сколько раз его просили - результата ноль, просто потому что нету ничего.

Никакие правила форума не нарушаются в том, что люди желают увидеть практическую реализацию всех этих портянок, чтобы понять, насколько оное работает в конечном продукте! не надо быть ябедой-дюдюкой, надо просто быть человеком. Разве это так сложно?
Свои общедоступные проекты я выкладывал, их даже повторяли другие люди и говорили спасибо еще!
Никаких правил форума тут не нарушается! Я интересуюсь конечным результатом, это нормально! Просто спрашиваю! А за спрос то зачем удалять "неудобные" мессаги то?

VladislavS, никакого хамства здесь нет! Никто вас не задевает и ваше ЧСВ не ущемляет. Наоборот, хотели посмотреть, чего вы достигли. Но оказалось, что законченного осмысленного просто и нету. Разве так сложно было сразу прямо ответить? Ничего страшного в этом нету, это нормально. Сложно было отвеить чтоль? Неудобный для вас вопрос?. Ну что поделать. есть такая каста - хеллоуворлдщик. Не плохая и не хорошая. Просто писанина ради писанины, без конечного результата.
На этом присвоении звания хэллоуворлдщик торжественно и закончим. Поздравляю вас, это почетно! :) Серьезно, межу прочим, без шуток.
Реклама
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

Сообщение Reflector »

[uquote="OKF",url="/forum/viewtopic.php?p=4342642#p4342642"]Ещё потому что приходится для разных семейств писать, а у некоторых ++ просто нет.( Ведь в чём плюс высокоуровневого языка? В переносимости, что бы там не говорили.[/uquote]
Сейчас STM32G0 по 60 центов можно взять, а С++ компилятора нет разве что для не особо популярных 8-ми битных пиков, ну для STM8 еще компилятор есть, но старенький. Так может этими морально устаревшими восьмибитками лучше не пользоваться, тогда на них и ничего переносить не придется? Или с ARM та же проблема, их изучать нужно лет так 20? :)
OKF
Это не хвост, это антенна
Сообщения: 1430
Зарегистрирован: Вт июн 07, 2011 08:03:18

Сообщение OKF »

[uquote="Reflector",url="/forum/viewtopic.php?p=4342683#p4342683"]Сейчас STM32G0 по 60 центов можно взять, а С++ компилятора нет разве что для не особо популярных 8-ми битных пиков...[/uquote]
Ну ладно. Да, можно взять. А люди хотят на ПИКах! Или даже на MCS51! И что ты с ними сделаешь? Ну вот нравится им с их игрушками играться, и чо? Ну не запретишь же им.) Такая вот фигня, малята.) И у меня самого куча этого хлама валяется. Понятно, что лучше/современнее STM, но задачи то разные. Иной раз нужно задержку выключения света сделать (жена вслепую по лестнице не может). И чо?)))
Реклама
Эиком - электронные компоненты и радиодетали
Собутыльник Кота
Аватара пользователя
Сообщения: 2567
Зарегистрирован: Вт май 01, 2018 19:44:47

Сообщение VladislavS »

Blue pill и Black pill все знают. Встречайте Green pill. Только не ржите сильно. Зато С++ на него есть в любом количестве.
СпойлерИзображение
Добавлено after 1 minute 21 second:
[uquote="OKF",url="/forum/viewtopic.php?p=4342714#p4342714"]А люди хотят на ПИКах! Или даже на MCS51![/uquote]Выдать по AVR-ке, которая за счёт наличия средств разработки их и того.
Реклама
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

Сообщение Reflector »

[uquote="OKF",url="/forum/viewtopic.php?p=4342714#p4342714"]Ну ладно. Да, можно взять. А люди хотят на ПИКах! Или даже на MCS51! И что ты с ними сделаешь?[/uquote]
Ничего не делать, пренебречь в силу малого их количества :)
OKF писал(а):Понятно, что лучше/современнее STM, но задачи то разные. Иной раз нужно задержку выключения света сделать (жена вслепую по лестнице не может). И чо?)))
Во-первых, для таких простых задач без разницы на чем писать, тут отсутствие C++ не мешает, можно взять любой мк и спокойно писать на С. Во-вторых, если у меня есть дешевый, значительно более производительный и при этом мало потребляющий STM32 с которым я привык работать и для которого написано множество либ, то на нем можно делать практически что угодно, от таких простейших проектов и до таких которые 8-ми битки просто не вытягивают. Скоро еще STM32C0 появится, самая простая серия, встроенный генератор на 48MHz и никаких страшных PLL :)
Реклама
OKF
Это не хвост, это антенна
Сообщения: 1430
Зарегистрирован: Вт июн 07, 2011 08:03:18

Сообщение OKF »

Ой, да ладно вам. Понятно что можно всем выдать что то посовременнее, но это они явно не поймут)). Вы же знаете эту старую гвардию! У них каждая спичка на счету.) Да и из нашего поколения(которые не избалованы объёмами), многие считают биты... И что ты им втемяшишь!(((
Но, в тоже время, что то в этом и есть... Или нет?
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18783
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

проблема С++ в том, что грандиозные изменения в нем происходят быстрее, чем реально освоить обычному любителю. тут и Си, оказывается, бездонный, а уж плюсы и подавно...

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

Мой уютный бложик... заходите!
Контактная информация:
Опытный кот
Аватара пользователя
Сообщения: 848
Зарегистрирован: Ср авг 03, 2022 05:22:56

Сообщение MLX90640 »

Ну там с С++ получилась такая незадачка, что он, будучи наследником С, унаследовал и евоные проблемы. Дальнейшие коррективы языка сводились к навешиванию заплаток, а затем поверх заплаток прикручивались заштопки, и так далее. Из-за чего язык получился неуклюжим, а местами и просто тупым. Это становится видно в сравнении с другими ЯВУ. Скажем так - С++ является первым уровнем семейства ЯВУ.
Писать на нем конечно же можно. Но во всём должен быть разумный компромисс, и любые крайности - они контрпродуктивны. Золотая середина - как известно, в середине.
Порог вхождения не является слишком высоким. Ардуинщики же "входят" ведь. Ну. А в остальном надо лишь правильно применять инструмент для достижения конечного результата, а не для писанины ради писанины.
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

Сообщение Reflector »

[uquote="MLX90640",url="/forum/viewtopic.php?p=4342845#p4342845"]Из-за чего язык получился неуклюжим, а местами и просто тупым. Это становится видно в сравнении с другими ЯВУ.[/uquote]
А толку если конкретно для эмбедда ничего лучше C++ нет, даже учитывая все его недостатки.

[uquote="ARV",url="/forum/viewtopic.php?p=4342839#p4342839"]проблема С++ в том, что грандиозные изменения в нем происходят быстрее, чем реально освоить обычному любителю.[/uquote]
Одно дело начать учить новый язык с нуля, Rust, например, и совсем другое учить C++ зная С, когда у тебя все предыдущие наработки компилируются новым компилятором в той же IDE. Или обычный любитель не запомнит, что можно вместо typedef struct писать просто struct, а вместо func(void) просто func()? Тут по мелочи поменял, там поменял, ненапряжное поступательное движение вперед, то что в самом языке происходят грандиозные изменения ничуть этому не мешает.
Собутыльник Кота
Аватара пользователя
Сообщения: 2567
Зарегистрирован: Вт май 01, 2018 19:44:47

Сообщение VladislavS »

Самое прикольное, про ужасы и страшные изменения говорят те кто языка не знают и не пользуются. А те кто на нём пишут годами ждут нововведений.
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18783
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

я сужу по себе: ассемблер х86, i51, avr, паскаль, delphi, C, javascript и немного java, php (пхп на уровне "изменить на сайте кнопку") я освоил самостоятельно и довольно быстро, а вот С++, не смотря на многочисленные "подходы к снаряду", так и не смог.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Опытный кот
Аватара пользователя
Сообщения: 848
Зарегистрирован: Ср авг 03, 2022 05:22:56

Сообщение MLX90640 »

ждут нововведений
Может, просто язык сменить на нормальный, а? Потому что штопание глючного С++ ничего более уже не дает.
Ну и как я уже не раз говорил, надо писать не ради писанины, а ради конечного результата.
Собутыльник Кота
Аватара пользователя
Сообщения: 2567
Зарегистрирован: Вт май 01, 2018 19:44:47

Сообщение VladislavS »

Как верно заметил Reflector, в эмбедде лучше нет, не на что менять.
Встал на лапы
Аватара пользователя
Сообщения: 104
Зарегистрирован: Пн ноя 04, 2019 09:58:29
Откуда: г. Нижний Тагил Свердл. обл.

Сообщение Эйлер Леонард »

Добрый вечер.
Решил вот на досуге пробежаться по теме lvalue/rvalue ссылки. Поговаривают что это типа круто, клёво и по современному. Повозившись немного с лампочками и "Хело ворлд" создалось мнение что для микроконтроллеров эта фича не оправдана и полезного понта не дает. Памяти мало, в С++ move нет, new / delete / ... ( но есть самодельное и на больших костылях ). Код -> main.cpp
Спойлер/* ATmega382P AtmelStudio -std=c++14 */
#define F_CPU 8000000UL
#include <avr/io.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>

#include "E:\lib\LiquidCrystal\LiquidCrystal.h"
#include "E:\lib\Pins\Pins.h"

uint8_t rs = PINB0; // REGISTER SELECT PIN
uint8_t enable = PINB1; //ENABLE PIN
uint8_t d0 = PINB2; //
uint8_t d1 = PINB3; //
uint8_t d2 = PINB4; //
uint8_t d3 = PINB5; //

LiquidCrystal lcd(rs, enable, d0, d1, d2, d3);

// lvalue/rvalue ссылки

template<typename T>
class Test {

public:

// Test(T value) : m_Value(value) {
// m_Value.output();
// m_Value.high();
// };

Test(const T& value) : m_Value(value) { // LED-GREEN
m_Value.output();
m_Value.high();
};

Test(T&& value) : m_Value(value) { // LED-YELLOW
m_Value.output();
m_Value.high();
};

private: T m_Value;

};

using PinD0 = Pin<PORT::D, 0>; // LED-YELLOW
PinD0 pinD0;

using PinD1 = Pin<PORT::D, 1>; // LED-GREEN
PinD1 pinD1;

Test<PinD0>test0(static_cast<PinD0>(pinD0));// LED-YELLOW

Test<PinD1>test1(pinD1); // LED-GREEN
//-------------


//void printReference(String str) {
// lcd.print("value: " + str);
//}

void printReference(const String& str) {
lcd.print(" & ref: " + str);
}

void printReference(String&& str) {
lcd.print("&& ref: " + str);
}

int main(void){
lcd.begin(20, 4);
lcd.cursor();

String ss = "Hello";

lcd.setCursor(0, 0);
printReference(ss);

//lcd.setCursor(0, 1);
//printReference("Hello");

lcd.setCursor(0, 2);
printReference(static_cast<String>("Hello"));

while (1) { }
}
Класс для пинов ->
Спойлер#ifndef PINS_H_
#define PINS_H_

#include <avr/io.h>
#include <stdint.h>

enum class PORT {
#ifdef PORTA
A = (const uint16_t) &PORTA,
#endif
#ifdef PORTB
B = (const uint16_t) &PORTB,
#endif
#ifdef PORTC
C = (const uint16_t) &PORTC,
#endif
#ifdef PORTD
D = (const uint16_t) &PORTD,
#endif
#ifdef PORTE
E = (const uint16_t) &PORTE,
#endif
};

template <PORT b, uint8_t ... all_args>
class Pin {
private:

static constexpr int8_t dir_offset = &DDRB - &PORTB;
static constexpr int8_t in_offset = &PINB - &PORTB;
//-----------
struct recursive {
static constexpr uint8_t bit_mask(){ return 0; }
template <typename first_arg_type, typename ...next_args_types>
static constexpr uint8_t bit_mask(first_arg_type first_arg, next_args_types ...next_args){
return (1<<first_arg) | bit_mask(next_args...);
}
};

public:

static void high() __attribute__((always_inline)){ // 1
*(volatile uint8_t*)(b) |= recursive::bit_mask(all_args...);
}
//-----------
static void low() __attribute__((always_inline)){ // 0
*(volatile uint8_t*)(b) &= ~recursive::bit_mask(all_args...);
}
//-----------
static void output() __attribute__((always_inline)){ // выход
*(volatile uint8_t*)(static_cast<int8_t>(b) + dir_offset) |= recursive::bit_mask(all_args...);
}
//-----------
static void input() __attribute__((always_inline)){ // вход
*(volatile uint8_t*)(static_cast<int8_t>(b) + dir_offset) &= ~recursive::bit_mask(all_args...);
}
//-----------
static void toggle() __attribute__((always_inline)){ // переключить
*(volatile uint8_t*)(static_cast<int8_t>(b) + in_offset) |= recursive::bit_mask(all_args...);
}
//-----------
static bool read() __attribute__((always_inline)){
return ((*(volatile uint8_t*)(static_cast<int8_t>(b) + in_offset) & recursive::bit_mask(all_args...))!= 0);
}
//-----------
static void write(int value) __attribute__((always_inline)){
if(value){ high(); } else { low(); }
}
//-----------
void operator=(int value) __attribute__((always_inline)){
write(value);
}
//-----------
operator bool() const __attribute__((always_inline)){
return (read());
}
//-----------
};

#endif
Оправдано ли Rvalue, семантика перемещения и пр. байда для МК?
Вложения
123.png
(55.44 КБ) 80 скачиваний
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18783
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

[uquote="VladislavS",url="/forum/viewtopic.php?p=4343127#p4343127"]Как верно заметил Reflector, в эмбедде лучше нет, не на что менять.[/uquote]а разве С не лучше? имхо, количество людей, способных разобраться в сишном коде и поддерживать его, кратно больше, чем тех, кто способен разобраться в чужом плюсовом коде (для эмбеда).
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

Сообщение Reflector »

Тем временем C23 продолжает перенимать фичи у С++, бетка gcc 13 уже компилит такое:

Код: Выделить всё

constexpr auto val = 0b1001'1100;
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18783
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

значит, скоро количество способных понять чужой код С и С++ сравняется...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Собутыльник Кота
Аватара пользователя
Сообщения: 2567
Зарегистрирован: Вт май 01, 2018 19:44:47

Сообщение VladislavS »

20 лет, не меньше.
Собутыльник Кота
Аватара пользователя
Сообщения: 2567
Зарегистрирован: Вт май 01, 2018 19:44:47

Сообщение VladislavS »

И вместо обычного шаблона предлагается вот такой хренью страдать. Мир сошёл с ума.

Код: Выделить всё

#define dataCondStoreTG(P, E, D)             \
  do {                                       \
    auto* _pr_p = (P);                       \
    auto _pr_expected = (E);                 \
    auto _pr_desired = (D);                  \
    bool _pr_c;                              \
    do {                                     \
      mtx_lock(&_pr_p->mtx);                 \
      _pr_c = (_pr_p->data == _pr_expected); \
      if (_pr_c) _pr_p->data = _pr_desired;  \
      mtx_unlock(&_pr_p->mtx);               \
    }  while(!_pr_c);                        \
  } while (false)   
Это если что, из описания нововведений к GCC 13. При том что на богомерзких и совершенно непонятных плюсах, этот код, лишённый всей макросовской мерзости , полагаю, будет вот так выглядеть.

Код: Выделить всё

void dataCondStoreTG(auto* P, auto E, auto D)
{
  bool _pr_c;
  do {
    mtx_lock(&P->mtx);
    _pr_c = (P->data == E);
    if (_pr_c) P->data = D;
    mtx_unlock(&P->mtx);
  } while (!_pr_c);
}
Последний раз редактировалось VladislavS Пн янв 02, 2023 16:18:17, всего редактировалось 2 раза.
Ответить

Вернуться в «Разные вопросы по МК»