Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Ответить

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

Вс дек 25, 2022 10:34:42

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

Заменил пример на классическую макросовскую залипуху.
Изображение

изображение_2022-12-25_112312443.png
(60.87 KiB) Скачиваний: 547

СпойлерА почему у вас такой интерес к скромной персоне неудачника у которого ничего нет, что вы за мной 6 лет по всем форумам носитесь? Я за это время не припомню, чтобы где-то вам задолжал и стал обязан свои проекты выкладывать. Выкладывайте свои, бедем смотреть а кто же судьи. А чтобы сообщения не удаляли надо всего лишь правила форума соблюдать.
Последний раз редактировалось VladislavS Вс дек 25, 2022 11:24:51, всего редактировалось 3 раз(а).

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

Вс дек 25, 2022 10:35:13

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

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

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

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

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

Вс дек 25, 2022 11:42:02

Ещё потому что приходится для разных семейств писать, а у некоторых ++ просто нет.( Ведь в чём плюс высокоуровневого языка? В переносимости, что бы там не говорили.

Сейчас STM32G0 по 60 центов можно взять, а С++ компилятора нет разве что для не особо популярных 8-ми битных пиков, ну для STM8 еще компилятор есть, но старенький. Так может этими морально устаревшими восьмибитками лучше не пользоваться, тогда на них и ничего переносить не придется? Или с ARM та же проблема, их изучать нужно лет так 20? :)

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

Вс дек 25, 2022 12:25:11

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

Ну ладно. Да, можно взять. А люди хотят на ПИКах! Или даже на MCS51! И что ты с ними сделаешь? Ну вот нравится им с их игрушками играться, и чо? Ну не запретишь же им.) Такая вот фигня, малята.) И у меня самого куча этого хлама валяется. Понятно, что лучше/современнее STM, но задачи то разные. Иной раз нужно задержку выключения света сделать (жена вслепую по лестнице не может). И чо?)))

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

Вс дек 25, 2022 12:52:44

Blue pill и Black pill все знают. Встречайте Green pill. Только не ржите сильно. Зато С++ на него есть в любом количестве.
СпойлерИзображение


Добавлено after 1 minute 21 second:
А люди хотят на ПИКах! Или даже на MCS51!
Выдать по AVR-ке, которая за счёт наличия средств разработки их и того.

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

Вс дек 25, 2022 13:48:09

Ну ладно. Да, можно взять. А люди хотят на ПИКах! Или даже на MCS51! И что ты с ними сделаешь?

Ничего не делать, пренебречь в силу малого их количества :)

OKF писал(а):Понятно, что лучше/современнее STM, но задачи то разные. Иной раз нужно задержку выключения света сделать (жена вслепую по лестнице не может). И чо?)))
Во-первых, для таких простых задач без разницы на чем писать, тут отсутствие C++ не мешает, можно взять любой мк и спокойно писать на С. Во-вторых, если у меня есть дешевый, значительно более производительный и при этом мало потребляющий STM32 с которым я привык работать и для которого написано множество либ, то на нем можно делать практически что угодно, от таких простейших проектов и до таких которые 8-ми битки просто не вытягивают. Скоро еще STM32C0 появится, самая простая серия, встроенный генератор на 48MHz и никаких страшных PLL :)

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

Вс дек 25, 2022 15:07:46

Ой, да ладно вам. Понятно что можно всем выдать что то посовременнее, но это они явно не поймут)). Вы же знаете эту старую гвардию! У них каждая спичка на счету.) Да и из нашего поколения(которые не избалованы объёмами), многие считают биты... И что ты им втемяшишь!(((
Но, в тоже время, что то в этом и есть... Или нет?

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

Вс дек 25, 2022 16:57:03

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

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

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

Вс дек 25, 2022 17:05:05

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

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

Вс дек 25, 2022 20:15:04

Из-за чего язык получился неуклюжим, а местами и просто тупым. Это становится видно в сравнении с другими ЯВУ.

А толку если конкретно для эмбедда ничего лучше C++ нет, даже учитывая все его недостатки.

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

Одно дело начать учить новый язык с нуля, Rust, например, и совсем другое учить C++ зная С, когда у тебя все предыдущие наработки компилируются новым компилятором в той же IDE. Или обычный любитель не запомнит, что можно вместо typedef struct писать просто struct, а вместо func(void) просто func()? Тут по мелочи поменял, там поменял, ненапряжное поступательное движение вперед, то что в самом языке происходят грандиозные изменения ничуть этому не мешает.

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

Вс дек 25, 2022 21:24:29

Самое прикольное, про ужасы и страшные изменения говорят те кто языка не знают и не пользуются. А те кто на нём пишут годами ждут нововведений.

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

Вс дек 25, 2022 21:29:25

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

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

Вс дек 25, 2022 21:50:18

ждут нововведений

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

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

Вс дек 25, 2022 23:13:15

Как верно заметил Reflector, в эмбедде лучше нет, не на что менять.

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

Вс янв 01, 2023 18:45:38

Добрый вечер.
Решил вот на досуге пробежаться по теме 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 KiB) Скачиваний: 39

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

Вс янв 01, 2023 19:22:54

Как верно заметил Reflector, в эмбедде лучше нет, не на что менять.
а разве С не лучше? имхо, количество людей, способных разобраться в сишном коде и поддерживать его, кратно больше, чем тех, кто способен разобраться в чужом плюсовом коде (для эмбеда).

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

Вс янв 01, 2023 20:09:59

Тем временем C23 продолжает перенимать фичи у С++, бетка gcc 13 уже компилит такое:
Код:
constexpr auto val = 0b1001'1100;

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

Вс янв 01, 2023 22:36:10

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

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

Вс янв 01, 2023 23:19:15

20 лет, не меньше.

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

Пн янв 02, 2023 15:57:47

И вместо обычного шаблона предлагается вот такой хренью страдать. Мир сошёл с ума.
Код:
#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 раз(а).
Ответить