Страница 10 из 13
Re: мелкие дешевые МК
Добавлено: Вс июл 24, 2022 22:24:00
КРАМ
[uquote="Transformer-V",url="/forum/viewtopic.php?p=4264807#p4264807"]нужно внешнее устройство отлаживать напрямую через x86/x64 машину с помощью моста, тем самым "вылизывать" управление им до блеска, правда необходимо уметь программировать под Win32. Ведь GUI винды гораздо удобнее, какого-то там UART, JTAG ... от слабенького MCU типа ARM[/uquote]
Редкостная чушь. Трава была забористая, сразу видно. GUI винды сама по себе реализует управление внешними устройствами через драйверы винды.
А писать драйверы для винды ничем не отличается от писания драйверов для ARM-ов или Атмег. И УАРТ тут вообще не причем. Как и житаг.
Тут разговор шел не о скорости обмена, а о возможности управлять интерфейсом связи с целевым внешним устройством. И чем тогда легче бессмысленное усложнение этой процедуры через софт ПК против нативного для задачи прямого управления периферией МК? Задача - настроить периферию МК, а не заниматься с "резиновой женщиной" рукоблудом.

Re: мелкие дешевые МК
Добавлено: Пн июл 25, 2022 01:17:44
Asmodey
[uquote="Transformer-V",url="/forum/viewtopic.php?p=4264807#p4264807"][uquote="Asmodey",url="/forum/viewtopic.php?p=4263382#p4263382"]А когда нужно что-то записать и прочитать во внешнее устройство, разработчик которого ленивая скотина и документацию писал левой ногой (а они через одного такие), тут порой отладочная информация на несколько метров ниже уровня земли уходит, при том что я на втором этаже работаю.
Нормальный режим... Вот когда назначение каких-то странных битов в загадочных регистрах будете угадывать методом тыка, тогда нам про "нормальный режим" расскажете.[/uquote]
А что - бы не гадать, нужно внешнее устройство отлаживать напрямую через x86/x64 машину с помощью моста, тем самым "вылизывать" управление им до блеска, правда необходимо уметь программировать под Win32. Ведь GUI винды гораздо удобнее, какого-то там UART, JTAG ... от слабенького MCU типа ARM или Atmega

[/uquote]
Чесслово, не понял прелестей отладки из под винды и с последующей отладкой в связке с МК...
Re: мелкие дешевые МК
Добавлено: Пн июл 25, 2022 06:21:40
tonyk
Asmodey писал(а):Чесслово, не понял прелестей отладки из под винды и с последующей отладкой в связке с МК...
Возможно, речь идёт о таких контроллерах:
https://icp-das.ru/collections/pac-upac
Если писать код так, чтобы он собирался и на этих контроллерах, и под Виндой, то почти всю отладку ПО получается выполнить под Виндой, а не через СОМ-порт этого контроллера. Теоретически, существует Turbo Debugger для удалённой отладки, но лично я его не нашёл. Плюс загрузка программы в такой контроллер отнимает заметное время, ибо идёт через СОМ-порт на скорости 115200, а сама программа будет не меньше 80-90К из-за библиотек, которые линкуются к ней.
Ещё случай отладки под Виндой это ПЛК, которые много общаются с IDE. Тоже очень удобно соединить ПЛК через пару виртуальных СОМ-портов с IDE, чтобы провести отладку и выполнить тестирование ПЛК и программ для ПЛК. Кстати, если кто не в курсе, то есть версия FreeRTOS для Винды, так что удаётся проверить довольно большие куски кода.
Отсюда и рождаются вот такие штуки:
Спойлер
Код: Выделить всё
////////////////////////////////////////////////////////////////////////////////
//
// UARTbase.h
//
////////////////////////////////////////////////////////////////////////////////
#pragma once
#ifndef __UART_BASE_H__
#define __UART_BASE_H__
////////////////////////////////////////////////////////////////////////////////
#include "targetver.h"
#include "MyTypes.h"
#include "AbsTrans.h"
#include "VirtWr.h"
#ifdef _WIN32_
#include "StdAfx.h"
#include <windows.h>
#pragma comment(lib, "kernel32.lib")
#endif
#ifdef _MINIOS7_
#include "I-7188XA.h"
#endif
#ifdef __STM32__
#ifdef __STM32F411__
#include "system_stm32f4xx.h"
#include "stm32f411xe.h"
#endif
#ifdef __STM32F446__
#include "system_stm32f4xx.h"
#include "stm32f446xx.h"
#endif
#ifdef __STM32F745__
#include "system_stm32f7xx.h"
#include "stm32f745xx.h"
#endif
#ifdef __STM32F767__
#include "system_stm32f7xx.h"
#include "stm32f767xx.h"
#endif
#include <stdlib.h>
#include "OS.h"
#include "kTask.h" // Собирается только под FreeRTOS!
#include "IRQ.h"
#endif
//------------------------------------------------------------------------------
#ifdef __MINIOS7__
#define MAX_SERIAL_PORTS 4 // Количество последовательных портов.
enum ComPort
{
COMPORT1 = 1,
COMPORT2 = 2,
COMPORT3 = 3,
COMPORT4 = 4,
UNKNOWNPORT = -1
};
#endif
//------------------------------------------------------------------------------
#ifdef __WIN32__
#define MAX_SERIAL_PORTS 32 // Количество последовательных портов.
enum ComPort
{
COMPORT0 = 0,
COMPORT1 = 1,
COMPORT2 = 2,
COMPORT3 = 3,
COMPORT4 = 4,
COMPORT5 = 5,
COMPORT6 = 6,
COMPORT7 = 7,
COMPORT8 = 8,
COMPORT9 = 9,
COMPORT10 = 10,
COMPORT11 = 11,
COMPORT12 = 12,
COMPORT13 = 13,
COMPORT14 = 14,
COMPORT15 = 15,
COMPORT16 = 16,
COMPORT17 = 17,
COMPORT18 = 18,
COMPORT19 = 19,
COMPORT20 = 20,
COMPORT21 = 21,
COMPORT22 = 22,
COMPORT23 = 23,
COMPORT24 = 24,
COMPORT25 = 25,
COMPORT26 = 26,
COMPORT27 = 27,
COMPORT28 = 28,
COMPORT29 = 29,
COMPORT30 = 30,
COMPORT31 = 31,
UNKNOWNPORT = -1
};
#endif
//------------------------------------------------------------------------------
#ifdef __STM32__
typedef struct
{
GPIO_TypeDef* port;
uint8 aBit;
}
AnPin;
typedef struct
{
AnPin Tx, Rx, dirControl;
}
UARTpin;
#endif
#ifdef __STM32F411__
// Количество аппаратных последовательных портов.
#define MAX_SERIAL_PORTS 5
#define MAX_VCP 1 // Количество виртуальнх портов
enum ComPort
{
COMPORT1 = 1,
COMPORT2 = 2,
COMPORT6 = 6,
COMPORT100 = 100, // Virtual COM-port over USB
COMPORT200 = 200, // Virtual COM-port over Ethernet
UNKNOWNPORT = -1
};
#endif
#ifdef __STM32F446__
#define MAX_SERIAL_PORTS 10 // Количество последовательных портов (UART)
#define MAX_VCP 1 // Количество виртуальнх портов
enum ComPort
{
COMPORT1 = 1,
COMPORT2 = 2,
COMPORT3 = 3,
COMPORT4 = 4,
COMPORT5 = 5,
COMPORT6 = 6,
COMPORT7 = 7,
COMPORT8 = 8,
COMPORT100 = 100, // Virtual COM-port over USB
COMPORT200 = 200, // Virtual COM-port over Ethernet
UNKNOWNPORT = -1
};
#endif
#ifdef __STM32F745__
#define MAX_SERIAL_PORTS 10 // Количество последовательных портов (UART)
#define MAX_VCP 1 // Количество виртуальнх портов
enum ComPort
{
COMPORT1 = 1,
COMPORT2 = 2,
COMPORT3 = 3,
COMPORT4 = 4,
COMPORT5 = 5,
COMPORT6 = 6,
COMPORT7 = 7,
COMPORT8 = 8,
COMPORT100 = 100, // Virtual COM-port over USB
COMPORT200 = 200, // Virtual COM-port over Ethernet
UNKNOWNPORT = -1
};
#endif
#ifdef __STM32F767__
#define MAX_SERIAL_PORTS 10 // Количество последовательных портов (UART)
#define MAX_VCP 1 // Количество виртуальнх портов
enum ComPort
{
COMPORT1 = 1,
COMPORT2 = 2,
COMPORT3 = 3,
COMPORT4 = 4,
COMPORT5 = 5,
COMPORT6 = 6,
COMPORT7 = 7,
COMPORT8 = 8,
COMPORT100 = 100, // Virtual COM-port over USB
COMPORT200 = 200, // Virtual COM-port over Ethernet
UNKNOWNPORT = -1
};
#endif
//----------------------------------------------------------------------
enum StopBits
{
ONE_STOP_BIT,
ONE_AND_HALF_STOP_BIT,
TWO_STOP_BITS
};
//------------------------------------------------------------------------------
enum Parity
{
NO_PARITY = 0,
ODD, // Нечётность
PARITY // Чётность
};
//------------------------------------------------------------------------------
enum UART_USE_AS
{
SIMPLE = 0,
MODBUS = 1
};
////////////////////////////////////////////////////////////////////////////////
class UART_base : public AbstractTransport, protected IRQ
{
public:
enum UART_ERROR
{
OK = 0,
INVALID_PORT = 1,
INVALID_BAUDRATE = 2,
UNSUPPORTED_DATA_BITS_VALUE = 3,
UNSUPPORTED_STOP_BITS_VALUE = 4,
MAPPING_NOT_SUPPORTED = 5,
ZERO_POINTER = 6,
INVALID_SIZE = 7,
IRQ_HANDLER_NOT_INSTALLED = 8,
DEVICE_IS_BUSY = 9,
// Ошибка операции ввода-вывода
IO_FAULT = 10,
// Превышено время ожидания окончания операции
TIMEOUT = 11
};
//----------------------------------------------------------------------
// Связывает объект SerialPort с физическим портом port,
// устанавливая для порта параметры приёма-передачи.
// Возвращает номер порта. Зачение UNKNOWNPORT указывает на ошибку.
virtual ComPort
open
(
ComPort port,
uint32 baudRate,
uint8 dataBits,
Parity parity,
StopBits stopBits
);
//----------------------------------------------------------------------
// Отвязывает физический порт от объекта SerialPort.
// Возвращает номер отвязанного порта. Значение UNKNOWNPORT
// указывает на ошибку.
virtual ComPort close( void );
//----------------------------------------------------------------------
// Возвращает номер физического порта, к которому выполнена
// привязка. Если привязка не выполнена или завершилась неудачей,
// то вернёт UNKNOWNPORT.
ComPort getPort( void );
//----------------------------------------------------------------------
// Возвращает код ошибки последнего вызова метода класса.
// 0 - нет ошибки, любое другое значение указывает на ошибку, код
// которой зависит от платформы.
virtual int32 getLastError( void );
//----------------------------------------------------------------------
// Принудительная очистка буферов. Количество байт для приёма-
// передачи обнуляется! Оставшиеся в передатчике байты не передаются!
virtual void purgeRxBuff( void ) = 0;
virtual void purgeTxBuff( void ) = 0;
//----------------------------------------------------------------------
// Читает в буфер buff размером buffSize байты из буфера приёмника.
// Работает в неблокирующем режиме!
// Возвращает количество прочитанных байт или ноль в случае
// отсутствия доступных для чтения данных.
virtual int16
receive
(
void* buff,
int16 buffSize,
MODE mode = NON_BLOCK
)
= 0;
//----------------------------------------------------------------------
// Записывает buffSize байт из буфера buff в буфера передатчика.
// Работает в неблокирующем режиме!
// Возвращает количество записанных байт или ноль в случае
// невозможности записи. lastError указывает на ошибку.
// Перед вызовом send(..) во избежании склеивания отправляемых
// посылок, необходимо вызывать getAvailableTxBytes(..) для проверки
// того, что буфер передатчика пуст.
virtual int16
send
(
void* buff,
int16 buffSize,
MODE mode = NON_BLOCK
)
= 0;
//----------------------------------------------------------------------
// Возвращает количество байт, находящихся в буфере передатчика.
virtual int16 getAvailableTxBytes( void ) = 0;
virtual int16 getAvailableRxBytes( void ) = 0;
//----------------------------------------------------------------------
// Сервисные функции для мониторинга и диагностики.
virtual ostream& print( ostream& os );
protected:
//----------------------------------------------------------------------
// Создаёт объект, через который будет осуществляться работа
// с последовательным портом. Может создаваться различная
// обвязка для удобства работы: очереди, семафоры и т.п.
UART_base
(
const char* name
);
//----------------------------------------------------------------------
// Уничтожает объект с высвобождением всех занятых ресурсов.
virtual ~UART_base( void );
//----------------------------------------------------------------------
ComPort port; // Привязаный порт.
int lastError; // Код ошибки последнего вызова.
uint32 baudRate;
uint8 dataBits;
Parity parity;
StopBits stopBits;
#ifdef __STM32__
uint32 APB_divider;
uint8 APB_n;
USART_TypeDef* usart;
IRQn_Type usart_IRQn;
//------------------------------------------------------------------
// Устанавливает события, по которым будет формироваться прерывания.
// Не забудь установить UE и определись с RE и TE!
virtual void setEvents( void ) = 0;
#endif
private:
// Закрываем конструктор копирования и оператор присваивания.
UART_base( const UART_base& );
UART_base& operator= ( UART_base& );
#ifdef _WIN32_
HANDLE m_hFile;
uint32 numOfBytesToWrite, // Количество байт для отправки.
bytesWrittens; // Количество отправленных байт.
#endif
};
extern UART_base *serialPort[ MAX_SERIAL_PORTS ];
////////////////////////////////////////////////////////////////////////////////
#endif // __UART_H__
////////////////////////////////////////////////////////////////////////////////
Re: мелкие дешевые МК
Добавлено: Пн июл 25, 2022 07:02:56
Asmodey
[uquote="tonyk",url="/forum/viewtopic.php?p=4264883#p4264883"]Возможно, речь идёт о таких контроллерах:[/uquote]
Если так, то чела совсем не в ту степь понесло.
Впрочем, тема давно уже ушла от темы так далеко, что...
Re: мелкие дешевые МК
Добавлено: Пн июл 25, 2022 22:53:27
Transformer-V
[uquote="Asmodey",url="/forum/viewtopic.php?p=4264865#p4264865"]Чесслово, не понял прелестей отладки из под винды и с последующей отладкой в связке с МК...[/uquote]
А прелесть следующая, к примеру имеется чип, но с кривым даташитом, пишем софт, управляем чипом, смотрим и получаем результаты (запись/чтение) в живую, без ограничения объема памяти и задач.

Re: мелкие дешевые МК
Добавлено: Пн июл 25, 2022 23:07:16
Asmodey
[uquote="Transformer-V",url="/forum/viewtopic.php?p=4265175#p4265175"]без ограничения объема памяти и задач[/uquote]
У тех кто пишет на регистрах, дефицита памяти и недостатка производительности как правило не возникает. Ресурсов МК хватает с избытком, в том числе и на отладочные вставки в код. Недостаток всего и вся, это проблема библиотекарей.
Re: мелкие дешевые МК
Добавлено: Пн июл 25, 2022 23:14:45
Transformer-V
[uquote="Asmodey",url="/forum/viewtopic.php?p=4265178#p4265178"]У тех кто пишет на регистрах, дефицита памяти и недостатка производительности как правило не возникает. Ресурсов МК хватает с избытком, в том числе и на отладочные вставки в код. Недостаток всего и вся, это проблема библиотекарей.[/uquote]
Ресурсы МК это ничто по сравнению с ресурсами x86/x64 машины

А выявить подводные камни без участия программиста / разработчика ( разраб может откинутся на спинку стула и отдыхать) гораздо быстрее на x86/x64, чем шариться в регистрах МК

В случае изучения конкретного раба - чипа с кривым даташитом с помощью x86/x64, никакие отладочные вставки ненужны, достаточно отслеживать программным путем результаты, необходимые результаты и протоколировать их в отладочный файл, потом отпарсировать нужное, ну или забагованное

Re: мелкие дешевые МК
Добавлено: Вт июл 26, 2022 05:45:44
Asmodey
Transformer-V, вы сами часто так делаете? Как отлаженные таким образом устройства потом ведут себя с МК? Можно примеры посмотреть?
Re: мелкие дешевые МК
Добавлено: Вт июл 26, 2022 06:46:57
ARV
я так писал библиотечку для микроплейера мп3 с сд-карты: китайский даташит процентов на 60 был правдив, а остальное уточнял экспериментально. собственно, даташит просто переведен был хреново и многие моменты были просто непонятны.
Re: мелкие дешевые МК
Добавлено: Вт июл 26, 2022 12:05:19
jcxz
[uquote="Transformer-V",url="/forum/viewtopic.php?p=4265180#p4265180"]А выявить подводные камни без участия программиста / разработчика ( разраб может откинутся на спинку стула и отдыхать) гораздо быстрее на x86/x64, чем шариться в регистрах МК

В случае изучения конкретного раба - чипа с кривым даташитом с помощью x86/x64, никакие отладочные вставки ненужны, достаточно отслеживать программным путем результаты[/uquote]Бред. Рассуждения диванного теоретика, никогда не работавшего с живым МК.
Либо "работавшего" только посредством чужих "либ". Что, по большому счёту, то же самое.
Re: мелкие дешевые МК
Добавлено: Вт июл 26, 2022 12:25:54
tonyk
jcxz писал(а):Бред. Рассуждения диванного теоретика
Не совсем. Если работа МК сводится к математическим расчётам и обмену данными по, например, EIA-485, то такая ситуация имеет право быть. В таком случае почти всё можно отладить на ПК, а потом перекомпилировать для МК. Но написать программу и драйверы так, чтобы они собирались и на ПК, и на МК- это надо уметь. И всё равно работа с регистрами периферии на МК никуда не денется, хотя есть ведь, например для STM32, небезызвестный HAL, который может скрыть и работу с регистрами. Хм, но всё равно, такой подход требует серьёзных знаний ПК с его ОС, и МК с его примочками.
Re: мелкие дешевые МК
Добавлено: Вт июл 26, 2022 13:08:48
КРАМ
[uquote="tonyk",url="/forum/viewtopic.php?p=4265246#p4265246"]Если работа МК сводится к математическим расчётам и обмену данными по, например, EIA-485, то такая ситуация имеет право быть.[/uquote]
Никто с этим и не спорит. Вопрос совершенно в другом: В ЧЕМ ПРОФИТ от такого подхода? Мало того, что нужно писать свой софт на ПК, так еще потом нужно его "вклеить" с драйверами на МК. Кому нужна эта лишняя работа? Расчеты вообще не рассматривались в обсуждении этой темы. А если и рассматривались, то в их взаимодействии с режимом реального времени, которое не симулируется на ПК в предлагаемом варианте. Да и не может симулироваться из за совершенно другой платформы. ОСРВ на ПК - это иная история.
Я сразу сказал - это редкостная чушь.
Re: мелкие дешевые МК
Добавлено: Вт июл 26, 2022 14:03:46
Asmodey
Чел, походу, свои хрустальные мечты озвучил. У мну подобные были в 3 классе: реактивный ранец, бесконечная батарейка, очки со встроенным телевизором, роликовые коньки с электромоторчиками, радиоуправляемая модель самолета с телевизионной камерой на борту и радиусом полета не менее 100 км. Одно хорошо - интернетов тогда не было, и надо мной хихикали только мои одноклассники. Нынешние третьеклассники брыжжут влажными мечтами как минимум в границах целой страны.
Re: мелкие дешевые МК
Добавлено: Вт июл 26, 2022 14:57:46
tonyk
КРАМ писал(а):В ЧЕМ ПРОФИТ от такого подхода?
В скорости разработки, хоть звучит неожиданно. Просто когда скорость загрузки программы для исполнения измеряется десятками секунд-минутами, плюс нет внутрисхемной отладки, а есть только printf(), то такой подход себя окупает. А если ещё и несколько проектов, то тем более.
КРАМ писал(а): Да и не может симулироваться из за совершенно другой платформы. ОСРВ на ПК - это иная история.
Не совсем так:
https://www.freertos.org/FreeRTOS-Windo ... MingW.html
Тут даже речь не о симуляции идёт. Если оборудование общается через 485-ый и Эзернет, то нет разницы, кто спрашивают и кому отвечают, МК или Винде. Лишь бы ответы укладывались в установленный предел.
Re: мелкие дешевые МК
Добавлено: Вт июл 26, 2022 16:07:19
КРАМ
[uquote="tonyk",url="/forum/viewtopic.php?p=4265288#p4265288"]В скорости разработки...[/uquote]Разработки ЧЕГО?
Если разговор идет об алгоритме расчетов, то для этого есть MATLAB. А если речь идет об интерфейсах или драйверах внешних устройств, то все повязано на железе связи с этими устройствами конкретно в этом МК.
Причем тут вообще обсуждаемая тема?
Напомню, что разговор шел о ВНУТРИСХЕМНОЙ отладке и инструментах для ее осуществления. А методы макетирования алгоритмов на сторонних платформах - это совершенно другая история.
ЗЫ. Намекну. Трансформер пропагандирует свои методы управления некими чипами через интерфейсы и софт ПК. Например, он тут хвалился управлением RGB-лентами. Вот о чем он ведет разговор. А совсем не о вычислительных алгоритмах.
Добавлено after 5 minutes 44 seconds:
[uquote="tonyk",url="/forum/viewtopic.php?p=4265288#p4265288"]Если оборудование общается через 485-ый и Эзернет, то нет разницы, кто спрашивают и кому отвечают, МК или Винде.[/uquote]
Если протокол обмена (верхнего уровня, конечно) не имеет документации, то совершенно фиолетово на чем с ним трахаться. Дело вкуса и привычек. Время там не сэкономишь. Ну вывалит, например, сниффер MIPI CSI тонну листов загрузки видеосенсора. Без внятной документации там все равно ничего не восстановишь. А если и восстановишь, то фиолетово чем снифферили - МК или ПК. Времени уйдет одинаково.
Re: мелкие дешевые МК
Добавлено: Вт июл 26, 2022 21:53:09
Transformer-V
[uquote="Asmodey",url="/forum/viewtopic.php?p=4265199#p4265199"]
Transformer-V, вы сами часто так делаете?[/uquote]
Очень часто, мне гораздо интереснее отладить до "блеска" работу чипа на x86/x64, потом наработки перевести в MCU (Atmel и т.д.) ну или на платформу с Z80 или 6809

Re: мелкие дешевые МК
Добавлено: Вт июл 26, 2022 22:35:43
Eddy_Em
Transformer-V, а что, существуют полноценные эмуляторы, скажем, тех же STM32? Может, они еще и свободные и под линуксом работают?
Re: мелкие дешевые МК
Добавлено: Ср июл 27, 2022 07:53:15
КРАМ
[uquote="Eddy_Em",url="/forum/viewtopic.php?p=4265448#p4265448"]полноценные эмуляторы, скажем, тех же...[/uquote]
Прикольный троллинг...
Причем тут симулятор? Трансформер штота говорил о симуляторах?
Re: мелкие дешевые МК
Добавлено: Ср июл 27, 2022 09:03:59
Asmodey
Это же классика - сначала наплодить себе трудностей, а потом героически преодолевать их противоестественным путем...
Re: мелкие дешевые МК
Добавлено: Ср июл 27, 2022 09:09:43
Eddy_Em
КРАМ, он говорил, что "до блеска" отлаживает МКшный код на ПК. И вот интересно, как он это делает, если добрая половина кода для МК завязана на его регистрах?
Всякую вычислительную чушь, понятное дело, на ПК можно отладить. Но сколько ее?
Нет уж, коль пишешь под МК, так и отлаживаешь непосредственно на МК. Самым простым диагностическим выхлопом. У меня в режиме DEBUG прошивка вполне может килобайт на 10 пухлее быть. И выхлопа спокойно в сотню килобайт в секунду производить в терминал. А в release-сборке
все эти DBG просто не раскрываются.
Совершенно аналогично отлаживаю софт под ПК, только там логи валятся в отдельный файл + stderr.
А насчет матлаба (только матлаба для людей — Octave) поддержу. Сам в октаве очень много чего намоделирую, а потом алгоритм переношу в сишный код и использую на ПК или МК. Особенно с обработкой изображений помогает, пока я не добил свою библиотечку для этих дел (использовать openCV — нужно совсем быть поехавшим головой, т.к. она жирная, тормозная и говно вообще).