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

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

28.06.2024, 09:55. Показов 4526. Ответов 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
1 / 1 / 0
Регистрация: 07.07.2020
Сообщений: 31
28.06.2024, 21:00  [ТС]
Студворк — интернет-сервис помощи студентам
Хорошо, спасибо большое, я завтра на работу иду , на работе этим в свободное время и занимаюсь, проверю
0
1 / 1 / 0
Регистрация: 07.07.2020
Сообщений: 31
29.06.2024, 08:17  [ТС]
Доброе утро Ну что, не совсем завелась программка. А именно, детект девайса на USB проходит, файл с сохранением пути директории открывает/выбирает, но блок
C#
1
2
3
4
5
6
7
8
9
private async void buttonWriteFile_Click(object sender, EventArgs e)
{
    if (comboBoxDeviceList.SelectedItem is FTDI.FT_DEVICE_INFO_NODE deviceInfoNode)
    {
        buttonWriteFile.Enabled = false;
        await _writer.WriteFile(deviceInfoNode, textBoxPath.Text);
        buttonWriteFile.Enabled = true;
    }
}
не выполняется, что то в условии if (3 строка) не устраивает
Скриншоты из VS в отладке (34 строка):
Миниатюры
Нужна помощь в написании кода для программы передачи байта на UART   Нужна помощь в написании кода для программы передачи байта на UART  
0
1 / 1 / 0
Регистрация: 07.07.2020
Сообщений: 31
29.06.2024, 08:37  [ТС]
Словом, с 34-строки, после проверки условия, проскакивает блок передачи на 40-ю строку.
0
1 / 1 / 0
Регистрация: 07.07.2020
Сообщений: 31
29.06.2024, 09:53  [ТС]
Меня смущает вот эта переменная FTDI.FT_DEVICE_INFO_NODE deviceInfoNode, в отладчике она остаётся в значении null
Миниатюры
Нужна помощь в написании кода для программы передачи байта на UART   Нужна помощь в написании кода для программы передачи байта на UART   Нужна помощь в написании кода для программы передачи байта на UART  

0
Эксперт .NET
 Аватар для Rius
13068 / 7629 / 1669
Регистрация: 25.05.2015
Сообщений: 23,183
Записей в блоге: 14
29.06.2024, 10:20
Обновите
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
        private void buttonRefreshDeviceList_Click(object sender, EventArgs e)
        {
            var devices = _writer.GetDeviceList();
            var items = devices
                .Select(x => new DeviceItem(x))
                .ToArray();
            comboBoxDeviceList.DataSource = items;
        }
 
        private async void buttonWriteFile_Click(object sender, EventArgs e)
        {
            if (comboBoxDeviceList.SelectedItem is DeviceItem deviceItem)
            {
                buttonWriteFile.Enabled = false;
                await _writer.WriteFile(deviceItem.Device, textBoxPath.Text);
                buttonWriteFile.Enabled = true;
            }
        }
 
...
 
        public class DeviceItem
        {
            public DeviceItem(FTDI.FT_DEVICE_INFO_NODE device)
            {
                Device = device;
            }
 
            public FTDI.FT_DEVICE_INFO_NODE Device { get; }
 
            public override string ToString() => $"S/N {Device.SerialNumber} ({Device.Description})";
        }
0
1 / 1 / 0
Регистрация: 07.07.2020
Сообщений: 31
29.06.2024, 10:26  [ТС]
Ура) Отработала) Плата индикации тоже приняла и вывела на диоды данные. Динамика положительная)
Миниатюры
Нужна помощь в написании кода для программы передачи байта на UART  
0
Эксперт .NET
 Аватар для Rius
13068 / 7629 / 1669
Регистрация: 25.05.2015
Сообщений: 23,183
Записей в блоге: 14
29.06.2024, 10:30
Надо в коде для МК запилить протокол обмена.
Чтобы можно было и читать, и записывать память, с проверкой целостности

Добавлено через 2 минуты
31 строку из 25 поста заберите, там исправил.
1
1 / 1 / 0
Регистрация: 07.07.2020
Сообщений: 31
29.06.2024, 10:56  [ТС]
Что мой код, а что Ваш - небо и земля) Здорово, когда получается) Жалко я на две недели всё приостановлю, с понедельника отпуск, у меня всё на работе, а дома просто не будет ни времени, ни сил))
Хотел выложить небольшое видео отработки кода на плате индикации через ютюб, да что то в предварительном просмотре не воспроизводит... выложу в архиве)
Вложения
Тип файла: rar Работа программы с платой индикации.rar (7.57 Мб, 21 просмотров)
0
1 / 1 / 0
Регистрация: 07.07.2020
Сообщений: 31
29.06.2024, 11:15  [ТС]
Цитата Сообщение от Rius Посмотреть сообщение
Надо в коде для МК запилить протокол обмена.
Я поищу в интернете тему и примеры кода для создания протокола обмена, благодарю за подсказку и помощь
0
Эксперт .NET
 Аватар для Rius
13068 / 7629 / 1669
Регистрация: 25.05.2015
Сообщений: 23,183
Записей в блоге: 14
29.06.2024, 11:18
Я на основе HART делаю.
Вложения
Тип файла: 7z hart_description_ra.7z (644.6 Кб, 17 просмотров)
Тип файла: 7z hart-protocol.7z (280.1 Кб, 14 просмотров)
0
1 / 1 / 0
Регистрация: 07.07.2020
Сообщений: 31
29.06.2024, 11:41  [ТС]
А я попробовал, так на вскидку, уже имеющийся "протокол" подредактировать и просто с обоих сторон увеличил скорость передачи с 4600 до 115200 бод => 1mb передала за 1.5 минуты, по сравнению с 4600, это быстро)) Или тут вопрос о "потерянных" битах/байтах?
0
Эксперт .NET
 Аватар для Rius
13068 / 7629 / 1669
Регистрация: 25.05.2015
Сообщений: 23,183
Записей в блоге: 14
29.06.2024, 11:44
Вопрос о корректности передаваемых данных и поддержке других операций, кроме тупой передачи одного массива байт.

Добавлено через 1 минуту
Потому что записывать во флеш подряд сплошным (равномерным) потоком у вас на хорошей скорости не получится.
0
1 / 1 / 0
Регистрация: 07.07.2020
Сообщений: 31
29.06.2024, 11:53  [ТС]
Хм.. век живи - век учись. А как же быть с определённым размером принятых данных = 1 байт, и он же идёт на шину DATA для занесения в память флеш (при участии шины адреса)? Или я ещё чего то не знаю)))
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
ISR(USART0_RX_vect)                     // прерывание на прием данных
{
    received_byte = UDR0;   
    dataReceived = 1;                   // флаг - данные получены
}
 
void init_USART()                       // инициализация UART
{
    UBRR0L = UBRR0L_value;              // регистр UBRRL отвечает за скорость работы UART и состоит из двух 8-ми битных регистров
    UBRR0H = UBRR0L_value>>8;           // смещаем на 8 бит относительно младшего регситра, чтобы обратиться к старшему регистру/байту
    UCSR0B |= (1<<RXEN0)|(1<<TXEN0);    // биты разрешения приёма передачи со стороны микроконтроллера
    UCSR0C |= (0<<USBS0)|(1<<UCSZ00)|(1<<UCSZ01);   // настройка размера фрейма данных 8 бит, без четности, 1 стоп-бит
    UCSR0B |= (1<<RXCIE0);                          // бит разрешения прирывания по приёму данных
    sei();                                          // разрешение глобального прирывания
}
0
Эксперт .NET
 Аватар для Rius
13068 / 7629 / 1669
Регистрация: 25.05.2015
Сообщений: 23,183
Записей в блоге: 14
29.06.2024, 11:55
Да, не знаете.
Hart вон тоже по одному байту передаёт, но это никому мешает.
Почитайте описание.
1
1 / 1 / 0
Регистрация: 07.07.2020
Сообщений: 31
26.07.2024, 10:37  [ТС]
Всем доброго времени суток) И так, попытка сотворить каменный цветочек продолжается. Сейчас я заморочился как написать реализацию 21-битной адресной шины в микроконтроллере на Си. Т.е., при получении байта от ПК, в микроконтроллере инкрементируется величина адресной шины на единицу (в формате: 0b000000000000000000000), выставляя актуальный текущий адрес для записи в микросхему памяти и выводится этот код на ножки микроконтроллера, на порты PORTA, PORTB, PORTC. И у меня теперь задача, как вывести этот адрес на три порта, почитал в интернете варианты, вроде как создать виртуальный порт, но моих навыков так и не хватило с этим разобраться
0
Эксперт .NET
 Аватар для Rius
13068 / 7629 / 1669
Регистрация: 25.05.2015
Сообщений: 23,183
Записей в блоге: 14
26.07.2024, 11:06
Какой еще виртуальный порт? Принять 3 байта , выставить каждый на свой порт.
0
1 / 1 / 0
Регистрация: 07.07.2020
Сообщений: 31
26.07.2024, 11:18  [ТС]
Так не получится, одна шина адреса 21 пин, и в режиме 1 byte шина данных 8 пинов..
Миниатюры
Нужна помощь в написании кода для программы передачи байта на UART  
0
Эксперт .NET
 Аватар для Rius
13068 / 7629 / 1669
Регистрация: 25.05.2015
Сообщений: 23,183
Записей в блоге: 14
26.07.2024, 11:21
Не вижу, почему не получится.
0
1 / 1 / 0
Регистрация: 07.07.2020
Сообщений: 31
26.07.2024, 11:44  [ТС]
Может я вас не правильно понял, но попробую ещё раз изложить свои мысли. Процесс прошивки микросхемы начинается с того, что со стороны ПК поступает байт данных тут же микроконтроллер (независимо от ПК) формирует адрес (21 бит) и выводит его на три порта (для 21 бита необходимо почти три байта, 1 порт = 1 байт), как только адрес выставлен на пины шины адреса, принятый байт со стороны ПК, выставляется на шину данных, да и обязательно надо будет ещё задействовать управляющие сигналы: Chip Enable, Write Enable, RESET...
0
Эксперт .NET
 Аватар для Rius
13068 / 7629 / 1669
Регистрация: 25.05.2015
Сообщений: 23,183
Записей в блоге: 14
26.07.2024, 11:48
Норм. Не вижу проблемы.
Разве что вы слишком упрощаете, чем создаёте сложности на будущее.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
26.07.2024, 11:48
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru