Отговори на тема  [ 166 мнения ]  Отиди на страница Предишна  1, 2, 3, 4, 5 ... 12  Следваща
Програмиране посредством AI/LLM - колекция трудни задания 
Автор Съобщение
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 27, 2005 12:48 pm
Мнения: 6094
Мнение Re: Програмиране посредством AI/LLM - колекция трудни задани
направих си експеримент
OpenAPI ( firmware -> userware ) го писах преди 3 години,
щото ме дразнеше джигитайския OpenCPU
https://github.com/Wiz-IO/OpenAPI/tree/main

Има няма си играх седмица, две ( не помня ) за целия проект
Тестовете бяха с Mediatek MT2625 - LPWA NB-IoT SoC ( ARMv7 Cortex M4 )
Кернела си има целия зоопарк FreeRTOS, lwIP ... SDK
а като за приложения използвах Arduino заради екосистемата
демо:
https://www.youtube.com/watch?v=2D3_3b4-PVo
https://www.youtube.com/watch?v=INCtjh26qOQ

Та теста с GROK: искам да напишем код на C за стартиране на application с
Position Independent Code за ARM M4 - firmware(кернел) & userware application(приложение)

без да му давам инфо от OpenAPI, само "константи" кое къде се намира...
3 цигари време с около 5 кратки промта, без Ардуино часта, около 200 реда С код
( ся, не отчитам времето, че тогава не знаех какво точно правя, а и тествах на чип дали работи )

Даде приличен код като има само една embedded специфичност - ELF struct
Без да го тествам на хардуер. Визуално изглежда като проекта ми OpenAPI.
Допускам грешки, виждам оптимизации...

След тази "щуротия" с OpenAPI се появи Nordic LPWA SoC-a с тъпия по по най Зефир
и мечтите на Ардуино върху Зефир ( скъсаха "приятелството" с MBED )
https://blog.arduino.cc/2024/12/05/intr ... ext-level/

"Подритвам" SEO-то на Ардуино и двама продукт меринджей от Nordic - Аре бе - boost чипа кат Ардуино
и до сега няма Ардуино върху Зефир ... иначе дадоха 50К да си вземат Зефир "значка" в алианса :D

PS: та, ако се върнат към Linux / Arduino след 10 години, да знаете, че аз ги "ритам" отдавна
https://x.com/TektonikaInfo/status/1781588614742233438
там в общите има една тема "The Internet of Stupid Things"

_________________
main[-1u]={1};


Сря Апр 02, 2025 5:15 am
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 27, 2005 12:48 pm
Мнения: 6094
Мнение Re: Програмиране посредством AI/LLM - колекция трудни задани
реших да пробвам GROK как ще се държи при уж реален проект - EVSE (зареждане)
ся, цялата бизнес логика е сложна, няма го тормозя токова...

( забележка: не го почнах от където трябва - просто тест )

Цитат:
трябва да напишем функция на С (вероятно STM32) която ще детектира PWM нивата за EVSE ( стандарта мисля че беше IEC standard 61851-1:2017)


сам си избра STM32F4, регистрово инициализира PWM & ADC
Потърси стандарта ... ( за STATE X нивата ),
Сети се, че на входа има R делител, но не се сети да го направи макрос, не че е мноо важно

Направи някъв базов код и леко го усложних с FreeRTOS таск...
( колко е верен целия код не ми се проверява ... теоретично -> базово )

Грубо казано: без "пилот" и ко-пилот трудно ще се справи с цял проект
бррррр - мързи ме да мисля, няма правя изводи...
но пилота тряя има яки нерви :wink:

част от кода
Код:
#include "stm32f4xx.h"
#include "FreeRTOS.h"
#include "task.h"

// Дефиниране на състоянията според IEC 61851-1:2017 с добавено STATE_ERROR
typedef enum {
    STATE_A = 0,     // Не е свързано (+12V)
    STATE_B = 1,     // Свързано, но не зарежда (+9V)
    STATE_C = 2,     // Зареждане (+6V)
    STATE_D = 3,     // Зареждане с вентилация (+3V)
    STATE_E = 4,     // Грешка (0V)
    STATE_F = 5,     // Отрицателно напрежение (-1V до -12V)
    STATE_ERROR = 6  // Всичко извън валидните диапазони (над +12V или под -12V)
} EVSE_State;

// Дефиниране на резисторите за делителя (в омове) и макрос за мащаба
#define RU 10000.0f  // Горно съпротивление (R_U) = 10kΩ
#define RD 2000.0f   // Долно съпротивление (R_D) = 2kΩ
#define SCALER ((RU + RD) / RD)  // Мащаб за резисторния делител

// Глобална променлива за съхранение на ADC резултата
volatile uint16_t adc_value = 0;

....................

// Функция за детекция на PWM нива и състояния
EVSE_State Detect_PWM_Level(void) {
    float voltage = (adc_value * 3.3) / 4095.0; // Преобразуване в напрежение (при 3.3V референтно)
    float scaled_voltage = voltage * SCALER; // Изчисление с макроса SCALER

    // Забележки за диапазоните на напрежение според IEC 61851-1:2017
    if (scaled_voltage > 11.0 && scaled_voltage <= 12.0) {
        // State A: +12V (11V до 12V)
        return STATE_A;
    } else if (scaled_voltage > 8.0 && scaled_voltage <= 11.0) {
        // State B: +9V (8V до 11V)
        return STATE_B;
    } else if (scaled_voltage > 5.0 && scaled_voltage <= 8.0) {
        // State C: +6V (5V до 8V)
        return STATE_C;
    } else if (scaled_voltage > 2.0 && scaled_voltage <= 5.0) {
        // State D: +3V (2V до 5V)
        return STATE_D;
    } else if (scaled_voltage >= -1.0 && scaled_voltage <= 1.0) {
        // State E: 0V (-1V до 1V)
        return STATE_E;
    } else if (scaled_voltage < -1.0 && scaled_voltage >= -12.0) {
        // State F: Отрицателно напрежение (-1V до -12V)
        return STATE_F;
    } else {
        // State ERROR: Всичко извън валидните диапазони (над +12V или под -12V)
        return STATE_ERROR;
    }
}


_________________
main[-1u]={1};


Чет Апр 03, 2025 9:46 am
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 27, 2005 12:48 pm
Мнения: 6094
Мнение Re: Програмиране посредством AI/LLM - колекция трудни задани
Без IDE ко-пилот, пилота ще скача без парашут...
( пенсионирането се отменя :) )

долния код е ... спам - просто тест за "бизнес" логика ( има няма 5, 6 прости задания )

Код:
global.h
c

#ifndef GLOBAL_H
#define GLOBAL_H

#include "stm32f4xx.h"
#include "FreeRTOS.h"
#include "task.h"
#include "queue.h"

// Дефиниция на идентификатори за задачите
#define TASK_MAIN_ID    0
#define TASK_UART_ID    1
#define TASK_RGB_ID     2

// Дефиниция на съобщения
#define MSG_TOGGLE_LED  1
#define MSG_SEND_UART   2
#define MSG_ON_LED      3
#define MSG_OFF_LED     4

// Дефиниция на структурата за съобщения
typedef struct {
    uint8_t DST;  // Дестинация (за кой таск е)
    uint8_t SRC;  // Източник (от кой таск идва)
    uint8_t MSG;  // Номер на съобщението
    uint32_t ARG; // Полезни данни (аргумент)
} Message_t;

// Структура за данни на задача
typedef struct {
    TaskFunction_t taskFunction;    // Функцията на задачата
    const char *name;               // Име на задачата
    uint16_t stackSize;             // Размер на стека
    void *parameters;               // Параметри за задачата
    UBaseType_t priority;           // Приоритет
    TaskHandle_t handle;            // Хендъл на задачата (след създаване)
    QueueHandle_t queue;            // Локална опашка за съобщения
    uint16_t queueSize;             // Размер на опашката (брой съобщения)
} TaskDescriptor_t;

// Глобален масив от дескриптори на задачи
extern TaskDescriptor_t tasks[];

// Макрос за изчисляване на броя задачи
#define MAX_TASKS (sizeof(tasks) / sizeof(tasks[0]))

#endif // GLOBAL_H

main.c
c

#include "global.h"
#include "task_main.h"
#include "task_uart.h"
#include "task_rgb.h"
#include "message.h"
#include "system.h"

// Глобален масив от дескриптори на задачи
TaskDescriptor_t tasks[] = {
    [TASK_MAIN_ID] = {
        .taskFunction = TASK_MAIN,
        .name = "TASK_MAIN",
        .stackSize = configMINIMAL_STACK_SIZE * 2,
        .parameters = NULL,
        .priority = 3,
        .handle = NULL,
        .queue = NULL,
        .queueSize = 20
    },
    [TASK_UART_ID] = {
        .taskFunction = TaskUART,
        .name = "TaskUART",
        .stackSize = configMINIMAL_STACK_SIZE,
        .parameters = NULL,
        .priority = 1,
        .handle = NULL,
        .queue = NULL,
        .queueSize = 10
    },
    [TASK_RGB_ID] = {
        .taskFunction = TaskRGB,
        .name = "TaskRGB",
        .stackSize = configMINIMAL_STACK_SIZE,
        .parameters = NULL,
        .priority = 2,
        .handle = NULL,
        .queue = NULL,
        .queueSize = 5
    }
};

// Главна функция
int main(void) {
    // Инициализация на хардуера
    HAL_Init();
    SystemClock_Config();

    // Инициализация на опашките в масива tasks
    for (uint8_t i = 0; i < MAX_TASKS; i++) {
        tasks[i].queue = xQueueCreate(tasks[i].queueSize, sizeof(Message_t));
        if (tasks[i].queue == NULL) {
            while (1); // Грешка при създаване на опашка
        }
    }

    // Създаване на задачите
    for (uint8_t i = 0; i < MAX_TASKS; i++) {
        xTaskCreate(tasks[i].taskFunction, tasks[i].name, tasks[i].stackSize,
                    tasks[i].parameters, tasks[i].priority, &tasks[i].handle);
    }

    // Стартиране на scheduler-а
    vTaskStartScheduler();

    while (1) {
    }
}

task_main.h
c

#ifndef TASK_MAIN_H
#define TASK_MAIN_H

#include "global.h"

// Прототип на TASK_MAIN
void TASK_MAIN(void *pvParameters);

#endif // TASK_MAIN_H

task_main.c
c

#include "task_main.h"
#include "message.h"

void TASK_MAIN(void *pvParameters) {
    Message_t receivedMsg;

    while (1) {
        if (GetMessage(TASK_MAIN_ID, &receivedMsg) == pdPASS) {
            switch (receivedMsg.MSG) {
                case MSG_TOGGLE_LED:
                    SendMessage(TASK_RGB_ID, TASK_MAIN_ID, MSG_TOGGLE_LED, receivedMsg.ARG);
                    break;
                case MSG_ON_LED:
                    SendMessage(TASK_RGB_ID, TASK_MAIN_ID, MSG_ON_LED, receivedMsg.ARG);
                    break;
                case MSG_OFF_LED:
                    SendMessage(TASK_RGB_ID, TASK_MAIN_ID, MSG_OFF_LED, receivedMsg.ARG);
                    break;
                case MSG_SEND_UART:
                    // Пример: изпращане на текст до TaskUART
                    char *text = "Hello from TASK_MAIN\r\n";
                    SendMessage(TASK_UART_ID, TASK_MAIN_ID, MSG_SEND_UART, (uint32_t)text);
                    break;
                default:
                    break;
            }
        }
        vTaskDelay(pdMS_TO_TICKS(10)); // Малко закъснение
    }
}

task_uart.h
c

#ifndef TASK_UART_H
#define TASK_UART_H

#include "global.h"

// Прототип на TaskUART
void TaskUART(void *pvParameters);

#endif // TASK_UART_H

task_uart.c
c

#include "task_uart.h"
#include "message.h"

void TaskUART(void *pvParameters) {
    Message_t receivedMsg;

    while (1) {
        if (GetMessage(TASK_UART_ID, &receivedMsg) == pdPASS) {
            switch (receivedMsg.MSG) {
                case MSG_SEND_UART:
                    // Получава текста от съобщението (ARG е указател към char*)
                    char *textToSend = (char *)receivedMsg.ARG;
                    if (textToSend != NULL) {
                        HAL_UART_Transmit(&huart2, (uint8_t*)textToSend, strlen(textToSend), 100);
                    }
                    break;
                default:
                    break;
            }
        }
        vTaskDelay(pdMS_TO_TICKS(10)); // Малко закъснение
    }
}

task_rgb.h
c

#ifndef TASK_RGB_H
#define TASK_RGB_H

#include "global.h"

// Прототип на TaskRGB
void TaskRGB(void *pvParameters);

#endif // TASK_RGB_H

task_rgb.c
c

#include "task_rgb.h"
#include "message.h"

void TaskRGB(void *pvParameters) {
    Message_t receivedMsg;

    while (1) {
        if (GetMessage(TASK_RGB_ID, &receivedMsg) == pdPASS) {
            switch (receivedMsg.MSG) {
                case MSG_TOGGLE_LED:
                    HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_5);
                    break;
                case MSG_ON_LED:
                    HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET); // Включва LED
                    break;
                case MSG_OFF_LED:
                    HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET); // Изключва LED
                    break;
                default:
                    break;
            }
        }
        // Пример: изпращане на съобщение до TASK_MAIN на всеки 2s
        SendMessage(TASK_MAIN_ID, TASK_RGB_ID, MSG_TOGGLE_LED, 0x5678);
        vTaskDelay(pdMS_TO_TICKS(2000));
    }
}

message.h
c

#ifndef MESSAGE_H
#define MESSAGE_H

#include "global.h"

// Прототипи на функции за съобщения
BaseType_t SendMessage(uint8_t dst, uint8_t src, uint8_t msg, uint32_t arg);
BaseType_t GetMessage(uint8_t taskId, Message_t *msg);

#endif // MESSAGE_H

message.c
c

#include "message.h"

BaseType_t SendMessage(uint8_t dst, uint8_t src, uint8_t msg, uint32_t arg) {
    if (dst >= MAX_TASKS || tasks[dst].queue == NULL) {
        return pdFAIL;
    }

    Message_t message;
    message.DST = dst;
    message.SRC = src;
    message.MSG = msg;
    message.ARG = arg;

    return xQueueSend(tasks[dst].queue, &message, pdMS_TO_TICKS(10));
}

BaseType_t GetMessage(uint8_t taskId, Message_t *msg) {
    if (taskId >= MAX_TASKS || tasks[taskId].queue == NULL) {
        return pdFAIL;
    }

    return xQueueReceive(tasks[taskId].queue, msg, portMAX_DELAY);
}

system.h
c

#ifndef SYSTEM_H
#define SYSTEM_H

#include "global.h"

// Прототип на системна функция
void SystemClock_Config(void);

#endif // SYSTEM_H

system.c
c

#include "system.h"

void SystemClock_Config(void) {
    // Добави своята конфигурация от STM32CubeMX тук
}

.......................



_________________
main[-1u]={1};


Чет Апр 03, 2025 12:33 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Чет Фев 03, 2005 2:21 am
Мнения: 12764
Местоположение: София
Мнение Re: Програмиране посредством AI/LLM - колекция трудни задани
Гледам че тая тема (за Тъпанчев) е дублирана в "академия" и в "безумни идеи". Кое я прави толкова важна?

Редакция:
Всъщност тая хипер важна тема е закачена във всеки раздел на форума. Мога ли да помомя някой от администраторите да вкара тоя отпадък в норма? :D


Нед Апр 20, 2025 12:22 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Чет Фев 03, 2005 2:21 am
Мнения: 12764
Местоположение: София
Мнение Re: Програмиране посредством AI/LLM - колекция трудни задани
Спамът на тая тема се е разпространил във всички раздели на форума.
Моля някой с права да я поокастри и вкара в норми!


Пон Апр 28, 2025 9:53 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Чет Сеп 26, 2013 2:24 pm
Мнения: 1765
Мнение Re: Програмиране посредством AI/LLM - колекция трудни задани
Тази тема всъщност я няма във форума. Тя се намира в паралелна вселена и заради смущения в квантовото поле и дуалната сингулярност се вижда дори когато я няма. Предполагам, че трябва да се рестартира седмия транскубтон който захранва ултрагравитрона на сървъра за да се поправи. Може и някой да го е страх да не остане от грешната страна на пространство-времевия континиум и за това да не я пипат.


Пон Апр 28, 2025 8:55 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Вто Дек 14, 2004 1:31 pm
Мнения: 3849
Мнение Re: Програмиране посредством AI/LLM - колекция трудни задани
Директорите на Майкрософт и Гугъл, и двамата направих изказване този месец, че приблизително 30% от базата им данни с код е генерирана от ИИ.

https://finance.yahoo.com/news/microsof ... 16317.html


Чет Май 01, 2025 1:56 am
Профил WWW
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Чет Фев 03, 2005 2:21 am
Мнения: 12764
Местоположение: София
Мнение Re: Програмиране посредством AI/LLM - колекция трудни задани
Тая тема е наспамила целия форум. Много е досадна. Няма ли кой да я метне у кофата?


Чет Май 01, 2025 9:07 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Съб Сеп 25, 2004 12:32 pm
Мнения: 8382
Местоположение: София
Мнение Re: Програмиране посредством AI/LLM - колекция трудни задани
какъв е проблема с тая тема?


Чет Май 01, 2025 11:28 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Чет Фев 03, 2005 2:21 am
Мнения: 12764
Местоположение: София
Мнение Re: Програмиране посредством AI/LLM - колекция трудни задани
Не става ли ясно от мненията по-напред в темата?


Пет Май 02, 2025 12:32 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Вто Дек 14, 2004 1:31 pm
Мнения: 3849
Мнение Re: Програмиране посредством AI/LLM - колекция трудни задани
Ицо, просто не я чети ако в момента не намираш полза в нея. Според мен ще става все по-актуална, тъй като покрива един от двата основни аспекта при работата с АИ - как да формулираме заданието (промпта) ефективно. За другия аспект - кой модел за използваме за кое задание, има отделна тема.


Пет Май 02, 2025 5:01 am
Профил WWW
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Чет Фев 03, 2005 2:21 am
Мнения: 12764
Местоположение: София
Мнение Re: Програмиране посредством AI/LLM - колекция трудни задани
И ти ли не разбра?
Тая тема е най-отгоре на ВСЕКИ раздел на форума. Който и раздел на форума да погледна, там е ИИ / АИ и на баба му дрона.
Това ли е най-важната тема в целия форум, че трябва да се натрапва по тоя начин.

Сега стана ли по-ясно или да подготвя есе? :D
Всъщност що не питате ИИ да ви разясни какво съм написал? :D


Пет Май 02, 2025 9:39 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Чет Фев 10, 2005 3:25 pm
Мнения: 5677
Местоположение: София
Мнение Re: Програмиране посредством AI/LLM - колекция трудни задани
itso.t написа:
Това ли е най-важната тема в целия форум, че трябва да се натрапва по тоя начин.

Прояви разбиране към хората с медицински проблеми. На един му трябва изкуствен крак, а на друг - изкуствен интелект. Не е добре да се подиграваш на инвалиди... 8)


Пет Май 02, 2025 11:46 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Окт 25, 2009 1:48 pm
Мнения: 1073
Мнение Re: Програмиране посредством AI/LLM - колекция трудни задани
И на мен ми направи впчеталение - наистина е плесната тази тема навсякъде, във всеки раздел. Доста е дразнещо. Това бъг на сайта ли е, или бъг на админа?


Пет Май 02, 2025 12:07 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Вто Фев 06, 2007 8:44 pm
Мнения: 3175
Местоположение: Пловдив
Мнение Re: Програмиране посредством AI/LLM - колекция трудни задани
Шегувате се, ама това чудо върши работа - ако не за друго, поне за някакви примерни идеи. Сега с децата сме на тема LEGO EV3 и го накарах да изгенерира примерни програмки за робота и за ПЦ, с които робота през WiFi и сокет да се свърже към PC-то, да може да изпраща данни , които да се визуализират графично и текстово на компа, а и да може да получава команди за движение от PC-то през GUI с Kivy на Питон със щтракане на пишката по бутони. (В училище учат питон и се опитвам да създам интерес и да видят смисъл за ученето му. По-нататък ще се върнем към C/C++)
Двете програми не заработиха от раз, но с 3-4 уточняващи въпроса и генерирания в последствие "пач" код заработиха.

Сега на база на тях модифицирайки и добавяики още код ще направим функкцианалността, която всъщност искаме.

Спести ни много четене и търсене на инфо, което няма да ни се размине, но ще е постепенно и в по-дълъг период от време. За момента много бързо стигнахме до работещ вариант (за да не загубим интерес). С негова помощ имаме код, който работи, който не се разбира съвсем от децата, но който е чудесна "работеща" и бързо достигната начална точка за учене и разбиране.

Съвсем друг е въпроса колко читав код е генерирал, но за начален вариант мисля, че е повече от добре.


Пет Май 02, 2025 12:19 pm
Профил
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 166 мнения ]  Отиди на страница Предишна  1, 2, 3, 4, 5 ... 12  Следваща

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 2 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни