Pull to refresh

Comments 53

Очень основательный подход! Следующим этапом было бы: своя печатная плата с расширением памяти и другими фишками под задачи(аппаратное отключение -например...)

Следующим этапом было бы: своя печатная плата с расширением памяти и другими фишками под задачи(аппаратное отключение -например...)

Проше взять готовую отладочную плату STM32F746G-DISCO . Где всё это добро уже есть

STM32F746G-DISCO микроконтроллерная плата jiaboroo за 11 596,23 ₽

Как мне кажется - дороговатая плата для диктофона.

Цифровой диктофон ockic WAV/MP3 128ГБ за 1 436,21 ₽

А вот сколько стоит диктофон, цифровой.

И то и другое с алиэкспресса.

плата с расширением памяти 

Что Вы подразумеваете под расширением памяти?
SDRAM? SPI-NAND? Другое?

|Главная трудность записи звука на микроконтроллерах заключается в том, что в микроконтроллерах нет столько много RAM памяти| -у вас так написано...

Для этого есть утилита H2testw.exe.

это вы под Windows на десктопе проверяете -

что карта в самом деле поддерживает нужную битовую скорость на запись

интересно? Если да, то как вы проверяете скорость записи на СТМ-ке, мне кажется у вас не очень понятно написано, а было бы интересно понять.

Не знаю это только я не понял есть ли у вас проверка при переключении буферов, что очередной буфер для записи свободен, то есть что данные из него полностью ушли на карту?

то как вы проверяете скорость записи на СТМ-ке, мне кажется у вас не очень понятно написано, а было бы интересно понять.

Вот такой модульный тест я написал для проверки скорости записи

Код измерения скорости записи в FAT-FS

/*
  tr fat_fs_write
*/
static uint8_t wrData[WRITE_PART_SIZE+1]={0};
bool test_fat_fs_write(void) {
    LOG_INFO(TEST, "%s():", __FUNCTION__);
    bool res = true;
    static uint32_t sn=0;
    FRESULT ret;
    sn++;

    memset(wrData, 0xAA, sizeof(wrData));
    FIL File = {0};
    uint32_t i = 0;
    uint32_t total_size = 0;
    uint32_t start_ms = time_get_ms32();
    char file_name[80]="";
    snprintf(file_name,sizeof(file_name),"TWP%u.bin", sn);
    LOG_INFO(TEST,"sizeof:%s ",file_name );
    BYTE mode = FA_WRITE | FA_CREATE_NEW |FA_OPEN_ALWAYS;
    FRESULT reto = f_open((FIL*)&File, (const TCHAR*) file_name, mode);
    LOG_INFO(TEST,"file_name:[%s],ret:%s ",file_name , FatFsResToStr(reto ));
    if(FR_EXIST==reto ) {
        ret = f_unlink(file_name);
        LOG_INFO(TEST,"DeleteFile:[%s],ret:%s ",file_name , FatFsResToStr(ret ));
        reto = f_open((FIL*)&File, (const TCHAR*) file_name, mode);
    }

    while(total_size < WAV_WRITE_SIZE) {
        UINT written = 0;
        ret = f_write(&File, wrData, WRITE_PART_SIZE, &written);
        EXPECT_EQ(FR_OK, ret);
        EXPECT_EQ(WRITE_PART_SIZE, written);
        if( FR_OK != ret ) {
            LOG_ERROR(TEST,"%u,WrError:%s",i, FatFsResToStr(ret ));
            break;
        }
        if(WRITE_PART_SIZE!=written) {
            break;
        }
        total_size += written;
        i++;
    }

    ret = f_close(&File);
    LOG_INFO(TEST,"CloseCode:%s " , FatFsResToStr(ret ));
    ASSERT_EQ(FR_OK, ret);
    uint32_t stop_ms = time_get_ms32();
    uint32_t diff_ms = stop_ms - start_ms;
    uint32_t data_rate= (1000*total_size) / (diff_ms);
    LOG_INFO(TEST,"totalSize:%u Byte,Duration:%u ms,WriteSpeed:%u Byte/s=%f kByte/s",
             total_size,
             diff_ms,
             data_rate,
             BYTES_2_KBYTES(data_rate));

    float ratio =((float) data_rate / (float) WAV_WRITE_SPEED);
    LOG_INFO(TEST,"ratio:%f ",ratio );
    ASSERT_GR(WAV_WRITE_SPEED, data_rate);

    EXPECT_EQ(WAV_WRITE_SIZE, total_size);
    return res;
}

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

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

    uint32_t start_ms = time_get_ms32();
    char file_name[80]="";
    snprintf(file_name,sizeof(file_name),"TWP%u.bin", sn);
    LOG_INFO(TEST,"sizeof:%s ",file_name );
    BYTE mode = FA_WRITE | FA_CREATE_NEW |FA_OPEN_ALWAYS;
    FRESULT reto = f_open((FIL*)&File, (const TCHAR*) file_name, mode);
    LOG_INFO(TEST,"file_name:[%s],ret:%s ",file_name , FatFsResToStr(reto ));
// ...
// ...
// ...


ret = f_close(&File);
// ...
// ...
// ...

    uint32_t stop_ms = time_get_ms32();

Зачем вы все это учитываете как время записи?

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

Потому, что FATFS фактическую запись как раз и делает внутри f_close.
Внутри f_close вызывается f_sync для фактической загрузки в накопитель.

Не знаю это только я не понял есть ли у вас проверка при переключении буферов, что очередной буфер для записи свободен, то есть что данные из него полностью ушли на карту?

У меня есть проверка на срыв потока.
Если длительность записи фрагмента превысила таймаут REC_PART_TIMEOUT_US , то происходит аварийная остановка записи.

static inline bool sound_rec_save_part_offset(SoundRecorderHandle_t* Node, 
                                              uint32_t offset, 
                                              uint32_t need_size) {
    bool res = false;
    if(Node->cur_save_size < Node->total_file_size) {
        UINT written = 0;
        uint32_t start_save_us = time_get_us32();
        void* buff = (void* )    ( (   (uint32_t ) Node->RxSampleArray) +  offset     );
        FRESULT ret = f_write(&Node->FileToRec, buff, need_size, &written);
        uint32_t end_save_us = time_get_us32();
        if(FR_OK == ret) {
            if(need_size == written) {
                Node->cur_save_size += written;
                Node->wr_ok_cnt++;
                res = true;
            } else {
                Node->error_size_cnt++;
                //LOG_ERROR(SOUND_RECORDER,"WriteSmall:%u Byte", written);
                res = sound_recorder_stop_ll(Node);
            }
            Node->action = SOUND_RECORDER_ACTION_NOPE;
        } else {
            Node->error_cnt++;
            Node->action = SOUND_RECORDER_ACTION_NOPE;
            res = sound_recorder_stop_ll(Node);
        }
        uint32_t diff_us = end_save_us-start_save_us;
        if (REC_PART_TIMEOUT_US < diff_us) {
            Node->long_write_error_cnt++;
            res = sound_recorder_stop_ll(Node);
        }
    } else {
        res = sound_recorder_stop_ll(Node);
    }
    return res;
}

ну вот здесь у вас один f_write

        uint32_t start_save_us = time_get_us32();
        void* buff = (void* )    ( (   (uint32_t ) Node->RxSampleArray) +  offset     );
        FRESULT ret = f_write(&Node->FileToRec, buff, need_size, &written);
        uint32_t end_save_us = time_get_us32();

измеряется, и получается он измеряет непонятно что если

FATFS фактическую запись как раз и делает внутри f_close

Но с точки зрения проверки что буфер свободен это корректно, тем не менее.

Но получается вы используете двойную буферизацию - одна своя, вторая от файловой системы. Это как минимум не очень эффективно, а как максимум будет иметь всякие странные эффекты, которые и приводят к артефактам в записанных данных и которые вы не отладите пока в конце концов не влезете с ногами в код реализации этой файловой системы и ее буферизации. Чужая реализация файловой системы в эмбеддед это почти всегда беда, такая черная дыра в которой размножаются баги безконтрольно. В эмбеддед Операционная Система (ОС) практически не бывает полноценная, там куча ограничений которые еще фиг все найдешь-отловишь. Фактически вы вместо того чтобы заниматься отладкой своего кода вынуждены заниматься исследованием кода этой ОС большую часть времени.

Не, ну на кодеке любой сделает. А вот ежели через ADC и DAC микроконтроллера...

У аудиокодека шире динамический диапазон: 24 бит вместо 12 на MCU. Плюс есть аналоговые предусилитель для микрофона, цифровой фильтр нижних частот.

Звук получается чище и разборчивее.

Зачем диктофону частота дискретизации 96 кГц? И тем более 384 кбайт/с, то есть стерео? Ему и 44,1 кГц - много. 32 кГц моно - вполне достаточно. А вот FAT16 - это анахронизм, особенно для диктофона, особенно без сжатия данных. А кодек WM8731 числится устаревшим - его уже не продают на Маузере и Дижикее, по крайней мере поштучно.

Зачем диктофону частота дискретизации 96 кГц? Ему и 44,1 кГц - много. 32 кГц - вполне достаточно.


Я хочу сделать автономный сонар из диктофона.
https://habr.com/ru/articles/868672/

Если повысить частоту дискретизации до 96kHz, то это улучшит разрешение измерения расстояния.

На частоте дискретизации 44100 Hz за один семпл (22.6 us) звук пролетает 331*(1/44100)=7.5mm. Свертка ЛЧМ дает максимум в одном семпле. Получается погрешность измерения расстояния должна быть -/+ 7.5 mm.

На частоте 96k Hz погрешность измерения расстояния должна быть -/+ 3.4 mm.

А кодек WM8731 числится устаревшим - его уже не продают на Маузере и Дижикее.

Зато он прост в программировании (11 регистров всего-лишь) и его можно купить на AliExpress прямо в составе готового модуля


https://aliexpress.ru/item/32857846271.html?shpMethod=CAINIAO\_STANDARD&sku\_id=65320258244&spm=a2g2w.productlist.search\_results.10.53306900uSNlJF

А вот ещё варианты:

LMD2718 + NS4168

PCM5102 + PCM1808

WM8960

WM8978

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

Изменять дискретизацию перед началом передачи данных, в зависимости от качества канала связи.

 А вот FAT16 - это анахронизм, особенно для диктофона.

Ну а что тут поделаешь, если модульные тесты проходят на FAT16 и проваливаются на FAT32?

возможно стоит для начала найти где ошибка? в низкоуровневых процедурах чтения записи карты (стм куб ведь поди, да? с дма?) или в фатфс (в которой, например, некоторые действия в фат32 вызывают рекурсию, посему от фат32 я напрочь отказался при использовании фатфс)

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

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

Да есть у меня модульные тесты и для SDIO трансивера
Вот тут.

https://github.com/aabzel/trunk/blob/main/source/unit_tests/test_set_hw/test_sdio/test_sdio.h
https://github.com/aabzel/trunk/blob/main/source/unit_tests/test_set_hw/test_sdio/test_sdio.c

возможно стоит для начала найти где ошибка?

Уже понял. Была слишком высокая частота линии тактирования в SDIO интерфейсе (24MHz).
Понизил до 6.9 MHz и FAT FS файлы стали стабильно записываться и читаться.

карта вроде говорит какую частоту она умеет. через csd если правильно помню

А кодек WM8731 числится устаревшим - его уже не продают на Маузере и Дижикее, по крайней мере поштучно.

Какой тогда аудиокодек Вы предлагаете применить?

Не подскажу - задача специфическая.

Да чего тут специфичного?. Заурядная звукозапись.

Ну, например есть I2S-кодеки, в которых в усилителе наушников очень плохо подавлен ШИМ, и это не описано в документации. Для слушания ушами не кричитно, но вот если работать с ультразвуком - очень может вылезти.

А кодек WM8731 числится устаревшим - его уже не продают на Маузере и Дижикее, по крайней мере поштучно.

WM8731 установлен на плате FPGA Altera-DE1. Плату FPGA Altera-DE1 тоже не продают на Маузере ?

Вот такая ситуация и доступностью на Digikey - по всем вариантам корпуса - статус "Obsolet". На Mouser - вообще доступны только "IC Development Tools Eval Bd"

Скрытый текст

А Mouser предлагает более новую альтернативу для Obsolet товаров? 

Насколько я знаю, нет - это нужно искать на сайте производителя, в данном случае это Cirrus Logic.

Все таки стоит на нормальную SD карту делать запись и как было сказано ранее, сделать готовое устройство. Просто на этих макетках как то кустарно получается. А так, сделать печатную плату, красивый корпус, все укомпоновать, добавить кнопки быстрого доступа к командам, небольшой дисплей и будет изделие, а не полуфабрикат.

Автор, я говорил тебе уже, у тебя такой потенциал, а ты каждый раз переизобретаешь велосипед, самокат, колесо и кирпичи. И все бы ничего, дальше макетной платы ты не идёшь, почему?

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

Это проект - интересный, но много НО! Контроллер на макетке, аудиоплата на макетке, какой микрофон - непонятно, как прослушать на диктофоне - непонятно. Управление - непонятно, индикации нет. Схемы устройства нет. Карта памяти только на FAT16 (объем я так понимаю был только такой в наличии) и FAT32 не работает.

Повторить такое устройство смогут единицы, если захотят (если найдут такие компоненты и будут согласны на программно-аппаратные ограничения).

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

Это не в упрёк, это взгляд со стороны.

 А так, сделать печатную плату, красивый корпус, все укомпоновать, добавить кнопки быстрого доступа к командам, небольшой дисплей и будет изделие

Среди российских программистов-микроконтроллеров в организациях в принципе нет пром-дизайнеров как класса. Хотя факультеты "Промышленного Дизайн" сейчас есть почти в каждом ВУЗзе. Если у нас делают какой-то электронный прибор (пусть даже с хорошей прошивкой), то он похож на кирпич, гробик или шайбу. В качестве корпуса обычно бездумно покупают готовые прямоугольные серые корпуса в ЧипИдип-е. Разъём всегда ставят DB-9 (привет из 195х). Нет уплотнений. щели получаются такие, что между разъёмом и корпусом можно аж палец засунуть. Получившееся изделие даже в руках держать противно. Торчат куски платы об которые можно поцарапаться. Даже если электроника и прошивка вдруг и внезапно получились великолепно, то механическое исполнение продукта все перечеркивает и обнуляет результат на корню.

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

Разве ты такой? Или ты в себя не веришь? Или ты ментально с теми, кто делает только так?

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

Это проблема детей СНГ, у нас слишком много самокритики, но беда в том, что мы с этим ничего не делаем, просто страдаем и сидим на попе ровно, потому что вме вокруг нас плохо, криво, некрасиво. Ну так что же мешает это изменить? Все в наших руках!

Поверь, я тоже так считал раньше,а живу я уже долго и застал и сложные и очень сложные времена. И живу я не в России, а в Казахстане, а тут было ещё сложнее чем в России.

Сейчас я вижу, как чувак из аула (небольшой поселок) , со своей простой идеей и небольшой реализацией банальной идеи влетает на поле битвы технологий и идёт вперед, с гробиками корпусов, макетными платами собранными в эти корпуса, но рабочим продуктом и продаёт его! Потом, со временем это превращается в изделие и серийный экземпляр. А по факту, человек просто начал изучать электронику и поверил в себя.

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

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

Возможно много написал, но от чистого сердца, ты подумай, просто подумай.

Я правда мало встречаю вот таких самородков как ты.

P.S. Ты никому ничего не должен, и логика простая. То, что твоё образование оплатило государство, не даёт ему права владения тобой. У тебя нет бумаги или договора, согласно которому ты ДОЛЖЕН:

возвращать результаты полученного технического образования обратно в народ.

Нет такого! У меня старшая дочка училась на бюджете и никто с неё ничего не требует. И не сможет потребовать.

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

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

Спасибо. А что еще остается делать ?
В России не разрабатывают по-настоящему крутую электронную технику.
Негде приложить свои силы.
Не разрабатывают вертикально приземляющиеся ракеты (реактивная посадка), не делают смартфоны, не делают электромобили, не делают радары с синтезом апертуры (SAR локаторы), не делают ЯМРТ томографы. Уровень современной embedded разработки РФ - это, условно, сделать прошивку платы для открытия и закрытия трубы - это максимум. И то с натягом.

И все бы ничего, дальше макетной платы ты не идёшь, почему?

Я специалист по прошивкам. Чертить 3D корпуса не умею. Топологию PCB трассировать тоже. Для того чтобы спроектировать полноценный продукт надо минимум 3 инженера: электронщик, пром-дизайнер и программист.

В России не разрабатывают по-настоящему крутую электронную технику. Негде приложить свои силы. Не разрабатывают вертикально приземляющиеся ракеты (реактивная посадка), не делают смартфоны, не делают электромобили, не делают радары с синтезом апертуры (SAR локаторы), не делают ЯМРТ томографы. Уровень современной embedded разработки РФ - это, условно, сделать прошивку платы для открытия и закрытия трубы - это максимум. И то с натягом.

Стань тем, кто это начнёт делать. И причём здесь Россия? Разве она тебя тормозит? Разве в ней дело?

Ты сейчас говоришь о стране, о людях очень субъективно, но зачем? Разве они тебе мешают сделать что-то? Разве они тебя как-то ограничивают? Начни делать не ради страны, а для себя, для своего благосостояния. Начни с заботы о себе и све вокруг увидят что если ты можешь сделать для себя, то и для других сможешь.

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

Я специалист по прошивкам. Чертить 3D корпуса не умею. Топологию PCB трассировать тоже. Для того чтобы спроектировать полноценный продукт надо минимум 3 инженера: электронщик, пром-дизайнер и программист.

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

Поверь, не боги разводят платы и не боги корпуса разрабатывают.

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

Касательно схем и плат: Easy EDA - как стартовый вариант - идеально! Заказ платы из программы. Хотя как у вас в России, не знаю. Из Казахстана работает прекрасно.

Касательно моделирования корпусов (на первое время хоть кирпичом, хоть гробиком) - SketchUp. Просто и незамысловато.

Принтер для печати - любой, хоть самый дешевый, размерами области печати 200×200×200. Для поделок хватит.

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

Я же писал тебе в личку, давай обсудим варианты, интересные, продуктивные, нужные и возможно продаваемые.

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

Вот интересное кино...
И кто в РФ делает эти самые сложные проекты?
И что это за проекты такие?

да полно ) ЖД, Росатом, связь, медицина - это знакомые и коллеги, бывшие и настоящие

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

Логика проста.
Российские налогоплательщики финансировали мое бюджетное образование в казёном Политехе. Теперь надо, по возможности, возвращать результаты полученного технического образования обратно в народ.

 как прослушать на диктофоне - непонятно. 

У меня есть отдельная тестировочная сборка

dev_ebox_stm32f4x_play_rec_gcc_m

как раз специльно для демонстрации возможности записи звука с последующим воспроизведением.

Вот тут можно скачать бинари.

https://github.com/aabzel/Artifacts/tree/main/dev_ebox_stm32f4x_play_rec_gcc_m

Достаточно в UART CLI выполнить команду

rec_play_start N

и прибор начнет записывать N секунд, а записав тут же воспроизведет записанное в наушники.

Log выполнения команды rec_play_start

индикации нет.

Я добавил индикацию для диктофона. LED всегда мигает с частотой 1Hz. Как метроном.

При этом: 
1) Если происходит запись звука, то LED мигает с заполнением 10%.
2) Если происходит воспроизведение звука, то LED мигает с заполнением 80%.
3) Если ничего не происходит, то  LED мигает с заполнением 50%.

Мигание в 1 Hz весьма удобно, так как позволяет глядя на прибор посчитать в уме длительность записи или воспроизведения.

 Схемы устройства нет. 

Я считал, что отладочные платы от компании DevEBox очень широко известны и не нуждаются в доп. рекламе. Тем не менее вот документация на учебно-тренировочную плату

DevEBox STM32F4XX M

https://stm32-base.org/boards/STM32F407VGT6-STM32F4XX-M.html

Вот её схемотехника

https://github.com/aabzel/trunk/blob/main/docs/boards/DevEBox_V3_0/sch/original-schematic-STM32F407VGT6_STM32F4XX_M.pdf

На её основе и был смонтирован прототип.

Все таки стоит на нормальную SD карту делать запись и как было сказано ранее, сделать готовое устройство. Просто на этих макетках как то кустарно получается. А так, сделать печатную плату, красивый корпус, все укомпоновать, добавить кнопки быстрого доступа к командам, небольшой дисплей и будет изделие, а не полуфабрикат.

В России и так делают хорошие диктофоны семейства EDIC.
https://www.telesys.ru/Products/EM
Можно просто взять и заказать себе готовое устройство.

Внутри прошивки я измерил реальную фактическую битовую скорость записи в файловую систему FAT и получил такую справку

Такое мог написать либо голимый ИИ, либо...

На КДПВ: вместо ActiveHight должно быть ActiveHigh, вместо Battary — Battery, вместо BlockDiagramVer:2 — Block Diagram v2. Если американская валюта обозначена через $, то и российская должна быть обозначена через ₽, а не RUR (хотя указание стоимости, температурного диапазона и корпусного исполнения на блок-схеме само по себе странно).
Число ошибок в тексте исчисляется десятками.
И так в каждой статье...

За период с 2022 года я 47 раз воспользовался Ctrl-Enter, чтобы указать на необходимость корректуры перед публикацией. Просил уделять внимание правописанию, хотя бы с помощью бесплатных сервисов. Но автор с патологическим упорством продолжает писать безграмотные статьи.

Что ж, это его выбор. Мой выбор — нажать кнопку "Скрыть публикации автора".

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

Уверяю вас, он не пользуется ИИ, потому как таких решений, которые делает автор, там ещё нет и ИИ пока ещё не существует, а то, что вы называете ИИ - по факту является нейросетью. Это если разговаривать на Вашем языке.

За период с 2022 года я 47 раз воспользовался Ctrl-Enter, чтобы указать на необходимость корректуры перед публикацией. Просил уделять внимание правописанию, хотя бы с помощью бесплатных сервисов. Но автор с патологическим упорством продолжает писать безграмотные статьи.

Вы очень настойчивый человек, но кто вас об этом просит? Хоть один читатель данного автора обратился к вам за этим? Автор просил вас оценивать его статьи? С какой целью вы пытаетесь доказать несостоятельность и безграмотность данного автора в знаниях русского языка? Автор продолжает писать статьи на тему не лингвистики, а на тему разработок своих уникальных устройств, решений и делится этим с народом!

А чем делитесь вы? Обвинениями? Оскорблениями? Претензиями? Чем?

ОТК нужен заводам, предприятиям, выпускающим Товарную продукцию, а не НИИ, которые выпускают идеи, решения, порой безумные. Гении могут не знать правил русского языка, не видеть ошибок, но останутся гениями.

Человеку свойственно ошибаться. Не ошибается тот, кто ничего не делает.

Вы, по всей видимости не ошибаетесь в этой жизни...

Что ж, это его выбор. Мой выбор — нажать кнопку "Скрыть публикации автора".

Надеюсь меня поддержат все читатели автора aabzel. Мы уважаем Ваш выбор! Вам не стоит расстраивать себя такими статьями. Вы старались, стремились, но....

Такое мог написать либо голимый ИИ, либо...

Вот и вправду говорят:
"Не делай добра, не получишь и зла"

 Если американская валюта обозначена через $, то и российская должна быть обозначена через ₽, а не RUR 

Это просто смешно.
На клавиатуре же просто нет символа P c черточкой под P, как в случае с cимволом $.
Человек явно перфекционист.

Вы работаете с картой в режиме DS?

Попробуйте HS, если это поддерживается, пропускна способность будет выше.

Где это включается?

Sign up to leave a comment.

Articles