Перейти к содержанию
    

Как правильно объявить extern для typedef?

2 часа назад, artemkad сказал:

"abrakadabrapin:0000in1+10"

и есть лексемы 

"pin:", "in", "+", цифры

ну а теперь попробуй сперва найти границы, а потом лексемы...

Я вам чего-то должен? С какой стати?

Я тут приводил уже и примеры кода и алгоритмы реализации. От вас же ничего конкретного мы не видели. Ни одного примера. Кроме пустых, где-то прочитаных лозунгов, типа "никакого парсинга в прерываниях" и искусственных, высосанных из пальца задач. Так что - ваша очередь: Приведите пожалуйста правильный с вашей точки зрения код, парсящий этот искусственный бред выше. Код в студию!

Вы вообще программировать умеете? Или только потрындеть зашли?

52 минуты назад, MementoMori сказал:

Где у меня слабое место?

Не читали в учебнике по языку си о структурах и выравнивание их членов.

Также - не читали ничего о протоколах передачи через последовательные каналы связи. Хотя тут вам их уже советовали. И не один. Но всё видно без толку.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 4/11/2023 at 4:00 PM, MementoMori said:

Но намек ясен, будут предложения по унификации, с целью платформонезависимости?  Где у меня слабое место?

1. Структура должна быть упакована.

2. Размеры int, char и т.д. на разных платформах могут быть разными, поэтому следует применять типы uint8_t, uint16_t и т.д., описанные в stdint.h

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

3 часа назад, MementoMori сказал:

Ну дык вот, делал уже

А теперь читайте по губам:

3 часа назад, Сергей Борщ сказал:

именно на буфер, а не на ваш объект класса TArray1<System::Byte>

 

2 часа назад, MementoMori сказал:

Делается под конкретную платформу. Для себя, если быть точным.

Даже если для себя - это не повод делать программу медленной. Зачем вы создаете объект в динамической памяти через new? Размер буфера в этом классе задается на этапе исполнения, значит сам буфер этот объект хранит в динамической памяти и размер самого объекта мизерный, его можно смело разместить на стеке не тратя время и электричество на выделение в динамической памяти и последующее удаление. Следующее улучшение - я бы создал наследника этого класса, для которого определил бы через шаблон  operator <<() для ссылки на любой тип, чтобы можно было писать Buffer << INFO_VAR; и о вычислении размера INFO_VAR и занесении этого размера в set_length() голова болела у компилятора.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 4/11/2023 at 6:46 PM, Сергей Борщ said:

Зачем вы создаете объект в динамической памяти через new? 

Он же писал, что пишет под Андроид.

Так что, скорее всего, это Java.

Лучше у ТС спросить.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 hour ago, Сергей Борщ said:

Зачем вы создаете объект в динамической памяти через new?

Я писал выше:

Quote

Сразу скажу тем, кто будет предлагать альтернативу - буфер должен быть объявлен так и только так, этого требует библиотека под Андроид, работающая с Bluetooth.

 

1 hour ago, Сергей Борщ said:

А теперь читайте по губам

Опять же, выше я уже написал, что понял это и исправил, все работает.

3 hours ago, jcxz said:

Не читали в учебнике по языку си о структурах и выравнивание их членов.

Знаю я про упаковку, я не знаю пока какой окончательный вид будет иметь структура. А узнаю я это в процессе разработки, в процессе испытания устройства, а для этого нужно погонять данные. А это тоже нужно организовать, лоск наведу потом.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 4/11/2023 at 8:07 PM, MementoMori said:

Знаю я про упаковку, я не знаю пока какой окончательный вид будет иметь структура.

Как связан окончательный вид структуры с упаковкой ?

Что мешает сразу написать __attribute__((packed)) или как там это в используемом вами компиляторе делается.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

26 минут назад, MementoMori сказал:

Я писал выше:

Библиотеке вы в строке

Socket->SendData(*buffer);

передаете ссылку на объект типа TArray__1<System::Byte> (или сам объект по значению, но это если совсем криворукие библиотеку писали). Ей абсолютно фиолетово, где этот объект лежит. Поэтому код

	{
		TArray__1<System::Byte> buffer;
		 buffer.set_length(sizeof(INFO_VAR));
	
		memcpy(buffer.data(),pInfo,sizeof(INFO_VAR));
		Socket->SendData(buffer);
	}

будет работать ничуть не хуже, но будет короче и быстрее.

1 час назад, dimka76 сказал:

Он же писал, что пишет под Андроид.

Так что, скорее всего, это Java.

Слышал, что Java сама мусор убирает. А тут delete в коде. Неужели в Java все-все переменные должны объявляться через new? Тогда new было бы просто избыточно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 4/11/2023 at 8:41 PM, Сергей Борщ said:

Слышал, что Java сама мусор убирает. А тут delete в коде. Неужели в Java все-все переменные должны объявляться через new? Тогда new было бы просто избыточно.

Не знаю. Я с Java не знаком.

Но тоже слышал, что в Java все объекты создаются в куче.

Хотя, ТС в одном из предыдущих сообщений приводит фрагмент своего кода, где фигурирует sizeof(), а в Java sizeof нет.

Пока ТС не признается, гадать можно долго )))

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

12 minutes ago, Сергей Борщ said:

удет работать ничуть не хуже, но будет короче и быстрее.

Возможно после компиляции он и мог бы работать быстрее. Но компилятор протестует. Г

14 minutes ago, Сергей Борщ said:

Неужели в Java все-все переменные должны объявляться через new?

В примере кода для bluetooth от разработчика очень много чего объявляется через new

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

30 minutes ago, dimka76 said:

Пока ТС не признается, гадать можно долго )))

Блин, да в C++ Builder я программирую. И в библиотеках для написания программ под Андроид дух Явы таки имеет место быть, ибо в созданном проекте есть такая строка #include <AndroidApi.JNI.JavaTypes.hpp>

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

36 минут назад, MementoMori сказал:

Но компилятор протестует.

Нам предлагается угадать, как именно он ругается?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

4 minutes ago, Сергей Борщ said:

Нам предлагается угадать, как именно он ругается?

Матом ругается. По-русски причем.

А если серьезно, я, опять таки, писал об этом ранее. 

[bccaarm Error] Unit1.cpp(253): no viable conversion from 'TArray__1<System::Byte> *' (aka 'System::DynamicArray<unsigned char> *') to 'System::TArray__1<System::Byte>' (aka 'System::DynamicArray<unsigned char>')
 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

На какую строку? В моем коде нет ни одного указателя, откуда ему взяться в сообщении об ошибке? Вы что-то где-то списали невнимательно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

13 minutes ago, Сергей Борщ said:

Вы что-то где-то списали неправильно.

Вы правы, был невнимателен, не везде удалил указатели. Поправил - все работает, без new. У меня размер буфера маленький (я сейчас набросал в максимально близком к конечному виде, получилось 224), разницы, естественно, незаметно, но, верю вам, что так лучше.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Потихоньку ковыряю дальше.

Выровнял структуру, из 224 байт сэкономил 24. Теперь структура весит 200 байт.

Решил поиграть в "эхо" - передаю данные и принимаю их же обратно. Передаю на скорости 115200 бод. Казалось бы, около 10 кбайт в секунду.

Цикл следующий - отправка 200 байт с телефона -> прием блютузом -> передача на контроллер -> передача из контроллера в блютуз -> прием в телефоне.

Процесс занимает около 1 секунды.

Так и должно быть?  В скорости передачи собственно байт сомневаться не приходится.  Так может быть начало и конец приема и передачи накладывают какие-то задержки?

В контроллере модуль HM-13, если что.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...