Выплескивание эмоций

Тема в разделе "Флудилка", создана пользователем alp69, 15 окт 2016.

  1. ИгорьК

    ИгорьК Гуру

    Таки доделай вывод.

    Вот мой вывод:
    1. Я уже забыл что есть Си, ибо для моих целей все хорошо.
    2. Опубликовал много полезных проектов и публиковал бы дальше, если бы не...
    3. Вдруг увидел как забавны, если не смешны, некоторые очень серьезные темы на тему Си.
    4. Компилятор интерпретируемому языку не нужен по сути.
    5. Пора освежить Python, ибо оч. хорош на применяемых МК.
    6. (?)За Си держатся старые пердуны, ибо осилить что-то новое не в состоянии, в первую очередь, в силу привычки мЫшления, а не скудности ума.

    А твой вывод какой?
     
  2. parovoZZ

    parovoZZ Гуру

    вот если бы не
    которые
    никакого LUA, Python и прочих языков на ESP не было.

    Звук через BLE сможешь передать по LUA? На сях - вообще не проблема.
    Поработать через USB сможешь на LUA? На сях - вообще не проблема.


    А вывод очень простой: Си и ассемблер вкопаны по самую раму.
     
    Feofan и Рокки1945 нравится это.
  3. Рокки1945

    Рокки1945 Гуру

    А Вы говорите - Паровозз не умеет кубики собирать - ))
     
    alp69 нравится это.
  4. parovoZZ

    parovoZZ Гуру

    это не прошлый век, а набор инструкций процессора в удобочитаемом виде.

    пазлы, кубики и прочая муть не потому, что лениво, а потому, что наглядно. Я когда программировал Овен, пользовал два языка: ST и FBD. Компаратор на FBD - это стандартный блок, а, например, оператор switch case на FBD - это абсолютно неказистая конструкция.

    Скриптовые языки хороши тем, что их не надо компилировать и не надо никуда встраивать. Как взаимодействовать на сях с браузером? Да так, чтобы его не завалить в случае ошибки.
     
  5. parovoZZ

    parovoZZ Гуру

    обратная сторона луны: интерпретируемый язык позволяет делать только то, что позволяет делать интерпретатор. Если внимательно изучить ветку по JS, то видно, что если там не цепляется модуль, то "программист" сидит жопой в луже. Без модуля ничего не работает.
     
  6. ИгорьК

    ИгорьК Гуру

    :) ты не тот суровый сибирский лесоруб из анекдота про хитрую японскую пилу?

    Да... глубоко ты забрался. Таких программистов от ардуино на этом форуме не меньше :) Но с существенным отличием, здесь модуль библиотекой называется!!! Прикинь!
     
  7. SergeiL

    SergeiL Оракул Модератор

    Однако, на третий день уже пошло! :)
    Все люди разные, задачи разные. Не зря такое разнообразие языков.
    Что кому удобнее, проще, и понятнее - на том и писать нужно!
     
    Un_ka и ИгорьК нравится это.
  8. ИгорьК

    ИгорьК Гуру

    Есть разные, а среди них - правильные :)
     
  9. SergeiL

    SergeiL Оракул Модератор

    Правильные - это которые себя правильными считают? :)
     
    Feofan и ИгорьК нравится это.
  10. SergeiL

    SergeiL Оракул Модератор

    А по поводу "привычки мЫшления", и линейности Си - вот примерчик на "чистом" Си.
    Тестик написан для xmega и sim900 в 2014г., когда в очередной раз "изобретался велосипед с удаленным управлением", но теперь уже на xmega и не хотелось писать все "линейно в лоб", как раньше.
    В конце main вызывается fsl_eloop_run().
    После этого все...
    Все включая обработку сообщений модема, ответов модема на команды, переповторы и.т.п - обрабатывается по событиям.
    Код (C++):
    #include <asf.h>
    #include <string.h>
    #include <stdint.h>
    #include <stdio.h>

    #include "lib_fsl/fsl_core.h"

    #include "drivers/usart_driver.h"

    #include "tools/usbserial.h"
    #include "tools/pin.h"

    #include "sim900.h"
    #include "cmd_processor.h"

    static void startup(void);

    static void startup(void)
    {
        pmic_init();
        sysclk_init();
        irq_initialize_vectors();
        board_init();
        ioport_init();
        delay_init(sysclk_get_cpu_hz());
        // TCC0 to call timer_callback every 10ms (100hz)
        tc_enable(&TCC0);
        tc_set_overflow_interrupt_callback(&TCC0, fsl_eloop_timer_callback);
        tc_set_wgm(&TCC0, TC_WG_NORMAL);
        tc_write_period(&TCC0, (uint16_t)(sysclk_get_cpu_hz()/800UL));//100hz
        tc_set_overflow_interrupt_level(&TCC0, TC_INT_LVL_LO);
        tc_write_clock_source(&TCC0, TC_CLKSEL_DIV8_gc);
        //
        sleep_set_mode(SLEEP_SMODE_IDLE_gc);
        sleep_disable();
        //sleep_enable();
        //
        PIN_Off(LED_Green);
        PIN_Off(LED_Red);
        //
        simcom_init( SIMCOM_DEBUGMODE_COMMAND );
        //
        cpu_irq_enable();
        //
        fsl_eloop_allocate();
        //
        usb_serial_init();
        //
        delay_ms(10000);
    }


    static void process_received_sms(
        PduPhoneNumberType sender_phone_type,
        char* sender_phone,
        char* sms)
    {
        //"LEDR:ON LEDG:OFF" or
        //"LEDR:1 LEDG:0"
        char* t = sms;
        int len;
        toUpper(t);
        t = skip_space_characters(t);
        //
        len = strlen(t);
        if (len >= 7 && 0 == memcmp(t,"REPLYME",7))
        {
            if (sender_phone_type != PHONE_NUMBER_TYPE_ALPHANUMERIC &&
                sender_phone_type != PHONE_NUMBER_TYPE_INVALID &&
                strlen(sender_phone) > 0)
            {
                simcom_send_sms(sender_phone_type, sender_phone, "Хозяин! Все под контролем.");
            }
            return;
        }

        while (t != NULL && *t != 0)
        {
            bool bledR = (0 == strncmp(t, "LEDR:", 5));
            bool bledG = (0 == strncmp(t, "LEDG:", 5));
            if (!bledR && !bledG)
            break;//NO LED
            t += 5;
            t = skip_space_characters(t);
            if (*t == '1' && (*(t + 1) == 0 || isSpace(*(t + 1))))
            {
                PIN_On(bledR ? LED_Red : LED_Green);
                t++;
            }
            else if (strncmp(t, "ON", 2) == 0 && (*(t + 2) == 0 || isSpace(*(t + 2))))
            {
                PIN_On(bledR ? LED_Red : LED_Green);
                t += 2;
            }
            else if (*t == '0' && (*(t + 1) == 0 || isSpace(*(t + 1))))
            {
                PIN_Off(bledR ? LED_Red : LED_Green);
                t++;
            }
            else if (strncmp(t, "OFF", 3) == 0 && (*(t + 3) == 0 || isSpace(*(t + 3))))
            {
                PIN_Off(bledR ? LED_Red : LED_Green);
                t += 3;
            }
            else
            {
                //NOT 'ON' NOR 'OFF'
                break;
            }
            t = skip_space_characters(t);
        }
    }

    //========================================================================

    static void MyCommandProcessorCb(SimcomCommandIdentity id, void* context)
    {
        char sid[8];
        itoa((int)id,sid,10);
        debug_out_arg_to_usb_usart("*CMD*", sid);
        //
        if (id == SIMCOM_CMD_ATCMGR || id == SIMCOM_CMD_CMT)
        {
            //SMS
            PDU_CMGR_Data* cmd = (PDU_CMGR_Data*)context;
            process_received_sms(PDU_GetPhoneNumberTypeFromAddressType(cmd->Address_Type),(char*)cmd->Address_String,(char*)cmd->Text);
        }
        else if (id == SIMCOM_CMD_CDS)
        {
            //SMS status report
            PDU_CDS_Data* cmd = (PDU_CDS_Data*)context;

        }
        else if (id == SIMCOM_CMD_ATCUSD)
        {
            //USSD
            PDU_CUSD_Data* cmd = (PDU_CUSD_Data*)context;

        }
        else if (id == SIMCOM_CMD_ATCREG)
        {
            //Network registration changed
            unsigned int net_status = (unsigned int)context;
            //one of SimcomNetworkStatus values SIMCOM_NET_...
            if (net_status == SIMCOM_NET_AT_HOME_NETWORK || net_status == SIMCOM_NET_AT_ROAMING)
            {
                //Here we could ask for Network Name
                QueueSimcomCommand(NewSimcomCommandFromText(SIMCOM_CMD_ATCOPS, "AT+COPS?", NULL_PTR, NULL_PTR));
            }
        }
    }
    //========================================================================
    //SIMCOM output filtering callback
    //  redirect received row to the 'command processor'
    //========================================================================
    static bool MySimcomFilteringCb(FslBuffer orow)
    {
        return (0 != cmd_processor_examine(fsl_buffer_ptr(orow), fsl_buffer_len(orow)));
        printf("test");
    }

    //AT+CSQ    - signal quality report
    //AT+CLIP=1 = enable CLIP

    int main (void)
    {
        startup();

        cmd_processor_set_cb(MyCommandProcessorCb);
        simcom_set_filtering_cb(MySimcomFilteringCb);

        //AT+CMGF=0 - PDU Mode
        //AT+CNMI - to tune sms notification(s)
        simcom_up();

        fsl_eloop_run();
    }
     
     
  11. ИгорьК

    ИгорьК Гуру

    Ну по крайней мере абдурину критикуют нипадецки :)
     
    issaom и SergeiL нравится это.
  12. ИгорьК

    ИгорьК Гуру

    Ну ты то хоть японскую пилу не проверяй :)
    Неужели все это серьёзно?

    Тут кто-то вспомнил тему Lua/Си. Напомню уж, что первая претензия к Си была - устал ставить гнутые скобки. И что-то ещё аналогичного значения.
    И что тут началось...
    Не ожидал такой реакции. Безумие. :)
     
    SergeiL нравится это.
  13. SergeiL

    SergeiL Оракул Модератор

    А я пытался найти ту тему - не нашел.
    Ты же видишь, я молчал до последнего. Дабы не вносить лишнего, только читал. :)
    Переход на очередь - получился классным надежным. Масштабируемым и без ошибок.
    Но это из осени 2014г. А в 2015г. я подсел на ESP8266 и понял, что все то, что я делал - можно еще годами разрабатывать...
     
  14. SergeiL

    SergeiL Оракул Модератор

    Python - понравился, хотя и пришлось повозился с ним после С.
    Первый раз с ним столкнулся на GSM-GPS модуле Telit в 2008, когда делал свой первый трекер для машины.
     
    ИгорьК нравится это.
  15. parovoZZ

    parovoZZ Гуру

    писяками меряться будем?
    У меня прерывание от АЦП выглядит вот так:
    Код (C++):
    ISR (ADC0_RESRDY_vect)
    {
        ADC_Data_array[ADC_AIN_index] = ADC0.RESL;
     
        ADC_AIN_index = (ADC_AIN_index + 1) & 0b00000011;
         
        ADC0.MUXPOS = ADC_MUXPOS_array[ADC_AIN_index];
     
        qTask_Notification_Send(&Task_ADC_Process, NULL);    
    }
    Вся обработка полученных результатов от АЦП в другой, неспешной, задаче.
    Между делом не забываю манерно поморгать светодиодами двойными вспышками:
    Код (C++):
    void LEDs_Blink_callback (qEvent_t e)
    {
        qCR_Begin
        {
            SPI_WriteArray(8, (uint8_t *)LED_A_on);
         
            qCR_Delay (TIMEOUT_LED_ON_work);
         
            SPI_WriteArray(8, (uint8_t *)LED_ALL_off);
         
            qCR_Delay (TIMEOUT_LED_ON_work);
         
            SPI_WriteArray(8, (uint8_t *)LED_B_on);
         
            qCR_Delay (TIMEOUT_LED_ON_work);
         
            SPI_WriteArray(8, (uint8_t *)LED_ALL_off);
         
            qCR_Delay (TIMEOUT_LED_OFF_work);
        }qCR_End;
    }
       
     
    Последнее редактирование: 28 дек 2020
  16. ИгорьК

    ИгорьК Гуру

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

    Ну хоть что утверждай - до такого доводит только си и ртос.
     
  17. Un_ka

    Un_ka Гуру

    Код (C++):
    qCR_Begin //<- что это?
        {
            //...
        }qCR_End; //<- и это?
    Этот оператор вы сами объявляете или он из библиотек?
     
  18. SergeiL

    SergeiL Оракул Модератор

    А то чем предлагается помериться уже выросло, из мигания светодиодом и чтения АЦП?
    Пускай и с применением готовой ртос, но хоть в одном устройстве уже работает?
     
    issaom и Airbus нравится это.
  19. parovoZZ

    parovoZZ Гуру

    Идёт планомерная отладка.

    Это реализация блокируемого вызова в кооперативной ОС.
     
  20. ИгорьК

    ИгорьК Гуру

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

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

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

    А теперь подумай, я серьёзно или шучу:)
     
    Последнее редактирование: 28 дек 2020
    SergeiL и AlexU нравится это.