Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.85/13: Рейтинг темы: голосов - 13, средняя оценка - 4.85
1 / 1 / 0
Регистрация: 07.07.2020
Сообщений: 31

Нужна помощь в написании кода для программы передачи байта на UART

28.06.2024, 09:55. Показов 4489. Ответов 53

Студворк — интернет-сервис помощи студентам
Превью: в программировании от случая к случаю + по настроению => далеко не магистр. Прошу отнестись с пониманием.
И так, моя задумка - собрать дампер для перезаписываемых игровых картриджей 16-ти битной консольки легендарной фирмы SEGA. На картриджах используются NOR Flash 4mb(32Mbit), другими словами необходимо собрать программатор с параллельным интерфейсом и уровнем питания 3.3v., для меня схема, печатка - это второстепенная часть, точнее это для меня более или менее ближе чем написание кода, т.е. по железу - микроконтроллер Atmega64A, шина адреса 22 bit, шина данных 8(16) bit, управляющие сигналы Chip Enable, Write... - это больше со стороны микроконтроллера на низкоуровневом языке "С".
На данном этапе, я изготовил платку индикации на светодиодах (Address BUS, DATA BAS, signals_indication) по ней и проверяю свои коды. Со стороны микроконтроллера сконфигурировал UART коннект, написал простенькие функции для вывода принятых данных на ножки микроконтроллера и индикацию. Попробовал написать код на C# со стороны ПК, по мимо сопутствующих недоработок, сейчас не реализован блок клавиши "Write", "Read", да, код очень "неуклюжий", повторюсь, я малоопытный. Даже что то работает, передача происходит, шины адреса и данных отрабатывают, но если я передаю файл побольше (1 mb), программа "падает" с сообщением:
"Буфер выходных символов не достаточен для хранения закодированных символов кодирование unicode utf-8..."
Опять же, я так и не понял как правильно воспользоваться библиотекой/функциями Write.Byte, Read.Byte...
В идеале - читать байт из файла и тут же его кидать на UART (FT232), без каких либо массивов, преобразований в String...?
Если какую информацию добавить, пожалуйста спрашивайте, обязательно отвечу.
Кликните здесь для просмотра всего текста

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
using FTD2XX_NET;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Reflection.Emit;
using System.Text;
using System.Threading.Tasks;
using System.Threading;
using System.Windows.Forms;
using System.Timers;
using static FTD2XX_NET.FTDI;
using System.IO.Ports;
using System.IO;
using System.Xml.Linq;
using System.Runtime.InteropServices.ComTypes;
using System.IO.Pipes;
 
namespace UART_damper
{
    public partial class Form1 : Form
    {
        // Создание нового экземпляр класса устройства FTDI:
        private FTDI myFtdiDevice = new FTDI();
        private OpenFileDialog ofd = new OpenFileDialog();
        public string fileName;        // адрес файла для передачи на UART
        public string dataRead;        // 
        public string data;            // 
        public string name;
 
        public Form1()
        {
            InitializeComponent();
        }
 
        //===========================================================================================//
        // Button Check
        //===========================================================================================//
        private void Button1_Click(object sender, EventArgs e)  // проверка коннекта с FT232
        {
            UInt32 ftdiDeviceCount = 0;
            //FTDI.FT_STATUS ftStatus = FTDI.FT_STATUS.FT_OK;
 
            //Определение количества устройств FTDI, подключенных сейчас к компьютеру:
            myFtdiDevice.GetNumberOfDevices(ref ftdiDeviceCount);
            // Проверка результата вызова GetNumberOfDevices:
            if (ftdiDeviceCount != 0)
            {
                label1.BackColor = Color.Green;
                label1.Text = "Connect!";
                //listBox1.Items.Add($"FTDI STATUS: {ftStatus}");
 
            }
 
            // Если нет ни одного подключенного устройства, то возврат:
            if (ftdiDeviceCount == 0)
            {
                label1.BackColor = Color.Red;
                label1.Text = "Disconnect";
            }
        }
        //==========================================================================================//
        // Button Reset
        //==========================================================================================//
        private void Button2_Click(object sender, EventArgs e)
        {
            label1.BackColor = Color.White;
            label1.Text = "Indication";
            //listBox1.Items.Clear();
        }
        //==========================================================================================//
        // Button Info for Window information
        //==========================================================================================//
        private void Button4_Click(object sender, EventArgs e)
        {
            UInt32 ftdiDeviceCount = 0;
            FTDI.FT_STATUS ftStatus = FTDI.FT_STATUS.FT_OK;
 
            // Определение количества устройств FTDI, подключенных сейчас к компьютеру:
            ftStatus = myFtdiDevice.GetNumberOfDevices(ref ftdiDeviceCount);
            // Создание хранилища для списка информации об устройствах 
            //  (device info list):
            FTDI.FT_DEVICE_INFO_NODE[] ftdiDeviceList =
                  new FTDI.FT_DEVICE_INFO_NODE[ftdiDeviceCount];
 
            // Заполнение списка информацией:
            ftStatus = myFtdiDevice.GetDeviceList(ftdiDeviceList);
 
            if (ftStatus == FTDI.FT_STATUS.FT_OK)
            {
                for (UInt32 i = 0; i < ftdiDeviceCount; i++)
                {
                    listBox1.Items.Add("Device Index:\t" + i.ToString());
                    listBox1.Items.Add("Flags:\t\t"
                                 + String.Format("{0:x}", ftdiDeviceList[i].Flags));
                    listBox1.Items.Add("Type:\t\t"
                                 + ftdiDeviceList[i].Type.ToString());
                    listBox1.Items.Add("ID:\t\t"
                                 + String.Format("{0:x}", ftdiDeviceList[i].ID));
                    listBox1.Items.Add("Location ID:\t"
                                 + String.Format("{0:x}", ftdiDeviceList[i].LocId));
                    listBox1.Items.Add("Serial Number:\t"
                       + ftdiDeviceList[i].SerialNumber.ToString());
                    listBox1.Items.Add("Description:\t"
                       + ftdiDeviceList[i].Description.ToString());
                    listBox1.Items.Add("");
                }
            }
        }
        //==========================================================================================//
        // Window information
        //==========================================================================================//
        private void ListBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            listBox1.SelectionMode = SelectionMode.MultiSimple;
        }
        //==========================================================================================//
        // Button Exit
        //==========================================================================================//
        private void Button3_Click(object sender, EventArgs e)
        {
            Close();
        }
        //==========================================================================================//
        // Button Clear ListBox
        //==========================================================================================//
        private void Button5_Click(object sender, EventArgs e)
        {
            listBox1.Items.Clear();
        }
        //===========================================================================================//
        // Поле ввода данных для отправки на микроконтроллер
        //===========================================================================================//
        private void textBox1_TextChanged(object sender, EventArgs e)
        {
 
        }
        //===========================================================================================//
        // Button Send
        //===========================================================================================//
 
        private void button6_Click(object sender, EventArgs e)
        {
 
            //FTDI.FT_STATUS ftStatus = FTDI.FT_STATUS.FT_OK; // создаём переменную которая принимает статус FT_OK
            UInt32 bytesWritten = 0;
 
            myFtdiDevice.OpenByIndex(0);
            myFtdiDevice.SetBaudRate(9600);
 
            string data;
 
            data = textBox1.Text;
 
            myFtdiDevice.Write(data, data.Length, ref bytesWritten);
 
            if (checkBox1.Checked == true)
            {
                listBox1.Items.Add($"Send symbol: " + data);
            }
 
            System.Threading.Thread.Sleep(500);
 
            //string readData = "";
            //UInt32 numBytesRead = 0;
            ////string[] dataBuffer = new string[255];
            ////string[] StringData = Array.ConvertAll<byte, string>(dataBuffer, x => x.ToString());
 
            //ftdi.Read(out readData, numBytesRead, ref numBytesRead);
            //label2.Text = readData.ToString();
 
            listBox1.ClearSelected();
            textBox1.Clear();
            myFtdiDevice.Close();
            //System.Threading.Thread.Sleep(500);
        }
 
        private new void Enter(object sender, KeyEventArgs e)           // ввод содержимого поля textBox1 через Enter
        {
            if (e.KeyCode == Keys.Enter) button6_Click(sender, e);  // прописать в конструкторе KeyDown - Enter
        }
 
        //===================================================================================================//
        // Button Read - Не работает!!!
        //===================================================================================================//
        private void button7_Click(object sender, EventArgs e)
        {
 
            //Создание нового экземпляр класса устройства FTDI:
            //FTDI ftdi = new FTDI();
            //myFtdiDevice.OpenByIndex(0);
            //myFtdiDevice.SetBaudRate(9600);
            //string portName;
            //myFtdiDevice.GetCOMPort(out portName);
 
            //string readData;
            //UInt32 numBytesRead = 0;
            //byte[] dataBuffer = new byte[255];
            ////string[] StringData = Array.ConvertAll<byte, string>(dataBuffer, x => x.ToString());
 
            //ftdi.Read(out readData, numBytesRead, ref numBytesRead);
            //label2.Text = portName;
 
 
        }
 
        //===============================================================================================//
        // button File selection
        //===============================================================================================//
        private void button8_Click(object sender, EventArgs e)
        {
            ofd.ShowDialog();
            fileName = ofd.FileName;
            name = ofd.SafeFileName;
            richTextBox1.Text = name;
        }
        //===============================================================================================//
        //  button write file
        //===============================================================================================//
        public void button9_Click(object sender, EventArgs e)
        {
 
            int countBit = 0;
            string data;
            char chData;                    // переменная для отображения символов и букв
            fileName = ofd.FileName;        // присваиваем адрес файла для чтения переменной fileName
            // открываем файл для чтения
            FileStream f = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.Read);
 
            // Создаем BinaryReader
            BinaryReader sr = new BinaryReader(f);
            // Пока не достигнут конец файла считываем его побайтно
            while (sr.PeekChar() > -1)
            {
                byte input = sr.ReadByte();
 
                UInt32 bytesWritten = 0;
 
                chData = Convert.ToChar(input);
                data = Convert.ToString(input);
 
                myFtdiDevice.OpenByIndex(0);
                myFtdiDevice.SetBaudRate(9600);
 
                myFtdiDevice.Write(data, data.Length, ref bytesWritten);
 
                if (checkBox1.Checked == true)
                {
                    listBox1.Items.Add($"" + countBit + "\tSend symbol: " + chData);
                    countBit++;
                }
 
                listBox1.ClearSelected();
                textBox1.Clear();
                myFtdiDevice.Close();
                //System.Threading.Thread.Sleep(500);
            }
            sr.Close();
        }
    }
    //===============================================================================================//
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
28.06.2024, 09:55
Ответы с готовыми решениями:

нужна помощь в написании программы для вычисления значения определителя матрицы
такое задание: составить программу для вычисления значения определителя четвертого порядка требования к алгоритму: 1) использовать...

Нужна помощь в написании кода
Есть документ в котором есть поля :Сотрудник(ссылка на справочник сотрудники),проект(ссылка на справочник...

Нужна помощь в написании кода на TemperMonkey
Сейчас мне нужно на этом языке внести изменения на странице с их сохранением. Нашел TamperMonkey(расширение для Хрома), но я не изучал...

53
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3385 / 2705 / 573
Регистрация: 04.09.2018
Сообщений: 8,517
Записей в блоге: 3
26.07.2024, 12:00
Студворк — интернет-сервис помощи студентам
Dock37, виртуальные порты собирают из свободных пинов на разных портах, когда некоторые пины уже заняты под что-то. В данном случае не вижу причин использовать это.
Собрать 21 бит из трех портов можно обычными битовыми операциями с отсечением последних 3-х бит у третьего порта.
0
1 / 1 / 0
Регистрация: 07.07.2020
Сообщений: 31
26.07.2024, 12:13  [ТС]
Я пробовал такой код, но не работает как хотелось бы
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void fooTestBusAdresData(void)
{
    countAdressBus++;
    if (countAdressBus > 0b000000000000000011111111 & countAdressBus < 0b000000010000000000000000)
    {
        countAdressBus1 = countAdressBus;
        PORTB = countAdressBus1>>8;                 // средний байт
    }
    if (countAdressBus > 0b000000001111111111111111)
    {
        countAdressBus2 = countAdressBus;
        PORTC = countAdressBus2>>16;               // старший байт
    }
    PORTA = countAdressBus;                                  // младший байт
    
    PORTF = received_byte;
}
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3385 / 2705 / 573
Регистрация: 04.09.2018
Сообщений: 8,517
Записей в блоге: 3
26.07.2024, 12:22
Dock37,
C
1
2
3
4
countAdressBus++;
PORTA = countAdressBus;
PORTB = countAdressBus >> 8;
PORTC = countAdressBus >> 16;
Зачем эти проверки?:
Цитата Сообщение от Dock37 Посмотреть сообщение
if (countAdressBus > 0b000000000000000011111111 & countAdressBus < 0b000000010000000000000000)
0
1 / 1 / 0
Регистрация: 07.07.2020
Сообщений: 31
26.07.2024, 15:24  [ТС]
Цитата Сообщение от wizard41 Посмотреть сообщение
1 countAdressBus++;
2 PORTA = countAdressBus;
3 PORTB = countAdressBus >> 8;
4 PORTC = countAdressBus >> 16;
Попробовал, поведение точно такое же как и с моим "неуклюжим" вариантом - PORTC не прорабатывает вывод, только два порта отрабатывают.
Вложения
Тип файла: rar Не полная работа кода.rar (5.38 Мб, 2 просмотров)
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3385 / 2705 / 573
Регистрация: 04.09.2018
Сообщений: 8,517
Записей в блоге: 3
26.07.2024, 16:35
Цитата Сообщение от Dock37 Посмотреть сообщение
PORTC не прорабатывает вывод, только два порта отрабатывают
1. у тебя в регистрах направления PORTC сконфигурирован как выход?
2. ты увидишь сигналы по его пинам только когда значение countAdressBus достигнет 65,53610

Добавлено через 17 минут
3. возможно в твоем MCU не хватает разрядности INT, используй long для счетчика.
1
1 / 1 / 0
Регистрация: 07.07.2020
Сообщений: 31
27.07.2024, 07:55  [ТС]
Цитата Сообщение от wizard41 Посмотреть сообщение
3. возможно в твоем MCU не хватает разрядности INT, используй long для счетчика.
Вы совершенно правы. Изменил на long и у "цветочка" появился листочек, третий байт адресной шины заработал
Да, обнаружил что в режиме один байт на шину data при прошивке микросхемы NOR flash, в адресное пространство 21-бит я не укладываюсь))
Думаю надо подключать ещё один байт-порт микроконтроллера для прошивки в режиме двух байт по шине data на единичку адреса.. сериал продолжается)))
Кстати, у меня на руках есть документация, ПО на перезаписываемый Flash картридж 32MX+UF для 16-ти битной консольки SEGA (и сам картридж тоже есть), вот с этого материала я и беру часть информации..
Миниатюры
Нужна помощь в написании кода для программы передачи байта на UART  
Вложения
Тип файла: pdf Схема_32MX+UF.pdf (39.0 Кб, 0 просмотров)
0
Эксперт .NET
 Аватар для Rius
13026 / 7591 / 1662
Регистрация: 25.05.2015
Сообщений: 23,094
Записей в блоге: 14
27.07.2024, 08:06
Цитата Сообщение от Dock37 Посмотреть сообщение
Думаю надо подключать ещё один байт-порт
Если портов не хватает, можно взять микроконтроллер покрупнее, или регистры-защёлки поставить.

Данные с ПК надо передавать не по одному байту.
0
1 / 1 / 0
Регистрация: 07.07.2020
Сообщений: 31
27.07.2024, 08:40  [ТС]
Цитата Сообщение от Rius Посмотреть сообщение
Данные с ПК надо передавать не по одному байту.
А как это возможно? Регистр где хранятся принятые данные размером 1 байт. Или вы имеете в виду приём данных "пачками" по протоколу обмена с промежуточным сохранением в локальные переменные и дальнейшей обработкой в микроконтроллере?
0
Эксперт .NET
 Аватар для Rius
13026 / 7591 / 1662
Регистрация: 25.05.2015
Сообщений: 23,094
Записей в блоге: 14
27.07.2024, 08:41
Цитата Сообщение от Dock37 Посмотреть сообщение
Или вы имеете в виду приём данных "пачками" по протоколу обмена с промежуточным сохранением в локальные переменные и дальнейшей обработкой в микроконтроллере?
Ага. Все так делают.
0
1 / 1 / 0
Регистрация: 07.07.2020
Сообщений: 31
04.09.2024, 12:20  [ТС]
Всем доброго времени суток. И так, после череды неудач (сначала сгорел HDD, потом сгорел ноутбук), на данном этапе я решаю вопрос с управляющими сигналами (Chip Eneble, Write Eneble, Out Eneble) и трудность в том, что на микроконтроллере свободными остались 3 пина на порту PORTC5-7 (он же старший байт шины адреса), на порту PORTE PE0-RX(занят), PE1-TX(занят), остальные свободные (PE3-PE7). Так вот, я же несколько часов без успеха пытаюсь соорудить решение, сначала пробовал виртуальный порт со скаченными с интернета макросами, не получилось, как будто информация не актуальная, библиотека написана больше 10-ти лет назад, потом по разным инструкциям в стиле сдвигов бит, тоже ерунда какая то получается, словом мои навыки слабоваты, опыта не хватает, да и теории не густо, подскажите пожалуйста.
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3385 / 2705 / 573
Регистрация: 04.09.2018
Сообщений: 8,517
Записей в блоге: 3
04.09.2024, 18:48
Цитата Сообщение от Dock37 Посмотреть сообщение
после череды неудач (сначала сгорел HDD, потом сгорел ноутбук)
ни чо так неудачи... Наверное ЦП в бесконечный цикл загнал опытами?
Цитата Сообщение от Dock37 Посмотреть сообщение
виртуальный порт со скаченными с интернета макросами, не получилось
так их мало только скачать - свои константы (порты) туда подставить надо. А в некоторых таких "скачанных" макросах надо еще лезть в сам макрос и править адреса там..
Цитата Сообщение от Dock37 Посмотреть сообщение
как будто информация не актуальная
не актуальнее, чем твой камень AMD-шный. Ничего не изменилось с тех пор, надо просто разобраться.
1
1 / 1 / 0
Регистрация: 07.07.2020
Сообщений: 31
05.09.2024, 08:02  [ТС]
Цитата Сообщение от wizard41 Посмотреть сообщение
ни чо так неудачи... Наверное ЦП в бесконечный цикл загнал опытами?
Да ну, купил китайский USB->sata, вот и натворил делов, по питанию выгорело от USB порта, жду с алиэкспресс запчатюльку.. А в бесконечный цикл - это я себя вчера загнал, правильно поговорка говорит: утро вечера мудренее. Сейчас разобрался с отдельным включением свободных пинов на порту (PORTE-PE2...PE7). Стыдно, ведь элементарно всё получилось.. Теперь задача разобраться с протоколом передачи данных, в моём случае происходит "лавинная", бесконтрольная трансляция байт, без "служебных" команд/данных.
1
1 / 1 / 0
Регистрация: 07.07.2020
Сообщений: 31
11.02.2025, 08:41  [ТС]
Цитата Сообщение от Rius Посмотреть сообщение
Надо в коде для МК запилить протокол обмена.
Чтобы можно было и читать, и записывать память, с проверкой целостности
Здравствуйте. Дошли наконец то мои руки к прошлогоднему проекту дампера. Словом решил я запилить протокол обмена, конечно не помешает добавить какую нибудь верификацию, тут почитал про эхо-верификацию, решил её попробовать, но, опять же по малоопытности ряд вопросов, буду очень благодарен за помощь в решении этих вопросов.
1. Назначение портов DATA с выходов меняются на входа (режим чтения данных из NOR flash), мне их просто переинициализировать при каждом обращении к блоку кода где требуется чтение данных из флэш для верификации или можно как то ещё решить их функциональность в плане двунаправленного назначения?
2. Вы написали мне класс Wreiter где идёт передача потоком файла, но теперь мне нужна передача команд (например для записи будет отправлен символ char 'W'), которые будут определять на стороне микроконтроллера, что от него требуется. Словом для меня очередная трудность
0
Эксперт .NET
 Аватар для Rius
13026 / 7591 / 1662
Регистрация: 25.05.2015
Сообщений: 23,094
Записей в блоге: 14
11.02.2025, 17:35
Здравствуйте,
Вот тут - Нужна помощь в написании кода для программы передачи байта на UART
было hart description.
Это протокол вида запрос-ответ, с контрольными суммами, кодами команд. То, что здесь нужно.
Попробуйте разобраться.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
11.02.2025, 17:35
Помогаю со студенческими работами здесь

Нужна помощь в написании програмного кода
Задача №1 тема регулярные циклы В одну и ту же переменную вводят N действительных чисел. Определить сумму чисел, с четными порядковые...

нужна сочная помощь в написании программы..
Пожалйста помогите решить(написать) задачи на делфи для экзамена коотрый будет 15 числа))) Задача: !) Вычислить сумму и количество...

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

Нужна помощь в написании программы (деревья)!!!!
Пожалуйста помогите в написании программы: Напишите программу, которая представляет операторы, выполняемые над деревом -PARENT (n,T),...

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


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
54
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru