Форум
 

Вернуться   Форум "Фрикер Клуб" - кодграббер своими руками > Основной раздел > Микроконтроллеры

Важная информация

Ответ
 
Опции темы Опции просмотра
Старый 19.07.2019, 21:13   #1
ahalam Меню Пользователя
Резидент клуба
 
Аватар для ahalam
 
Регистрация: 04.12.2012
Сообщений: 42
По умолчанию функция "make8()" как развернуть в обратную сторону?

Всем привет! Компилятор CCS C для PICов, имеется переменная int32 X;
из этой переменной, с помощью "make8()" я получил массив что-ли? int8 Y[4];
т.е. Y[0],Y[1],Y[2],Y[3] и отправил это по USB на компьютер. На компе это хйство
нужно снова собрать в int32 X, но функции "make32()" как в CCS компиляторе я не нашел.
На компе использую TDM GCC компилятор и редактор Geany.
Any suggestions?
__________________
in hope of deliverance
ahalam вне форума   Ответить с цитированием
Старый 19.07.2019, 21:53   #2
EPA Меню Пользователя
Супер Модератор
 
Аватар для EPA
 
Регистрация: 01.11.2016
Сообщений: 1,332
По умолчанию Re: функция "make8()" как развернуть в обратную сторону?

Через USB ты передаёшь компу с помошью протокола USART допустим стандартно по 8 бит( бывает случаи и по 9 бит, но это как я понял не в твой случай). А комп твой 32-х битный. Можно на стороне компа использовать стандартную функцию ToInt32( ), т.е. конвертируем байт в 32-х переменную... . Но это, честно говоря, по колхозному. А вдруг операционная система компа 64-битная? Рекомендую лучше погуглить по такому тексту " прием и передача данных через COM-порт" . А там в СЕТИ найдешь куча примеров кода, т.е готовое решение.
EPA вне форума   Ответить с цитированием
Старый 20.07.2019, 08:47   #3
ahalam Меню Пользователя
Резидент клуба
 
Аватар для ahalam
 
Регистрация: 04.12.2012
Сообщений: 42
По умолчанию Re: функция "make8()" как развернуть в обратную сторону?

Я передаю на комп с помощью периферийного usb модуля сразу буфер т.е. массив. На компе на выходе функции usb_bulk_transfer() тоже имею массив. Через USART как раз все работает(но медленно)
Так что ToInt32() по моему самое то, пасибки!
__________________
in hope of deliverance

Последний раз редактировалось ahalam; 20.07.2019 в 08:50.
ahalam вне форума   Ответить с цитированием
Старый 20.07.2019, 17:34   #4
ahalam Меню Пользователя
Резидент клуба
 
Аватар для ahalam
 
Регистрация: 04.12.2012
Сообщений: 42
По умолчанию Re: функция "make8()" как развернуть в обратную сторону?

ToInt32() не работает с массивом ;( получилось вот так :

int main()
{

int i[4] = {0xf1,0xf2,0xf3,0xf4},l;
uint32_t m = 0;

for (l=0;l<3;l++)
{
m +=i[l];
m = m<<8;
}
m +=i[l];

printf ("your int_32 value is: %X \r\n ",m);
}
__________________
in hope of deliverance
ahalam вне форума   Ответить с цитированием
Старый 21.07.2019, 09:15   #5
Бурый Меню Пользователя
Резидент клуба
 
Аватар для Бурый
 
Регистрация: 05.01.2014
Сообщений: 461
По умолчанию Re: функция "make8()" как развернуть в обратную сторону?

Можно решить через union.
__________________
Планировалось сделать "устройство"...и снова получились часы. Бой курантов тревожит двор)
Бурый вне форума   Ответить с цитированием
Старый 26.07.2019, 20:10   #6
EPA Меню Пользователя
Супер Модератор
 
Аватар для EPA
 
Регистрация: 01.11.2016
Сообщений: 1,332
По умолчанию Re: функция "make8()" как развернуть в обратную сторону?

Цитата:
Сообщение от ahalam
ToInt32() не работает с массивом ;( получилось вот так :

int main()
{

int i[4] = {0xf1,0xf2,0xf3,0xf4},l;
uint32_t m = 0;

for (l=0;l<3;l++)
{
m +=i[l];
m = m<<8;
}
m +=i[l];

printf ("your int_32 value is: %X \r\n ",m);
}

Спецы по программированию на винде, посмотрев на этот листинг, улыбнуться. Ну фиг с ними, я как и ты тоже в прошлом типа так писал код. По своему опыту и уберечь тебя от ходьбы по граблям и изобретения велосипедов , а так же экономии времени, позволь мне дать тебе пендаль в нужное направление.
Программирование на С/С++ в ОС Windows- это геморрой в квадрате. Простую программку ещё как бы можно написать, но что-нибудь серьёзное без соответстующей квалификации вообще очень и очень сложно и долго. А я, поверь мне, писал коды на разных языках: Pascal, Fortran, Delphi, Java, C, C++, C# , а некоторые языки программирования я уже даже не помню.
Смотря на твои записи, я тебе советую лучше забудь про Geany . Возьми сделай следующее:
1) установи себе среду разработки Visual Studio, ибо на ней очень много готовых исходников в сети.
2) на Visual Studio выбери язык программирования C# ( Си шарп). C# -это типа облегченая версия С++ c куевой хучей библиотек.. Как научишься на С#, потом тебе легче будет переходить на С++, Java, Android.
3) и усё! скачиваешь готовый пример и радуешся. За один вечер -ты научишсья работать с COM-портом. В гугле пишешь так: C# Visual Studio работа с COM.
EPA вне форума   Ответить с цитированием
Старый 26.07.2019, 20:44   #7
ahalam Меню Пользователя
Резидент клуба
 
Аватар для ahalam
 
Регистрация: 04.12.2012
Сообщений: 42
По умолчанию Re: функция "make8()" как развернуть в обратную сторону?

Слушай, если ты ты так болеешь за Visual Studio , скажи, есть там библиотека для работы с usb? Я пользуюсь макеткой на которой НЕТУ UARTа. Я даже не знаю на каких пинах процессора USART.
И я не могу поставить Visual Studio, потому что тогда придется удалить или Android Studio или World of Tanks
__________________
in hope of deliverance

Последний раз редактировалось ahalam; 26.07.2019 в 20:52.
ahalam вне форума   Ответить с цитированием
Старый 26.07.2019, 22:17   #8
EPA Меню Пользователя
Супер Модератор
 
Аватар для EPA
 
Регистрация: 01.11.2016
Сообщений: 1,332
По умолчанию

Цитата:
Сообщение от ahalam
Слушай, если ты ты так болеешь за Visual Studio , скажи, есть там библиотека для работы с usb? Я пользуюсь макеткой на которой НЕТУ UARTа. Я даже не знаю на каких пинах процессора USART.
И я не могу поставить Visual Studio, потому что тогда придется удалить или Android Studio или World of Tanks

Сноси Android Studio, на Visual мона писать как на андройд так и на Айфоны.
Там инициализация твоего usb-порта одной строкой:

SerialPort usbDataFack = new SerialPort("COM3", 9600, Parity.None, 8, StopBits.One);
Прием данных можно через usbDataFack.DataReceived()

Добавлено через 7 минут
А если у тебя стоит Android Studio, то должен знать Java. А Java ( старший брат Android) это тот же Сишарп C#, тока со своими библиотеками.

Добавлено через 5 минут
int main() -правильно пишут main(), т.е. без int.это стандарт.
int i[4] = {0xf1,0xf2,0xf3,0xf4} пишут int i[ ], т.е без 4. Это тоже стандарт.
Чтобы каждый раз не инициализировать переменные в главном цикле , то их выносят за main() { }.

Добавлено через 14 минут
uint32_t m = 0; -это безнаковый int, а _t -значит шаблон.
И если прога на компе , то int автоматом 32-х разрядный.

По правилу написания красивого кода ( чтоб другим прогерам легче читать код) переменная с большой буквой означает что это константа, это про твою переменную " I ".

Добавлено через 8 минут
А самое главное, привожу вырезку от уважаемого Paul74s:
....
собрать byte в long можно так
long =byte[3]; long<<=8;
long+=byte[2]; long<<=8;
long+=byte[1]; long<<=8;
long+=byte[0];
Можно и через цикл, но выигрыш может быть отрицательным как по месту так и по времени работы
...
Так что брат, не кипятись согласись, так красивее.

Добавлено через 18 минут
И послееднее: если единожды написав код на Visual Studio, то очень очень легко его перенести прогу и на anroid и IPhone, что не скажешь про твою Geany.

Последний раз редактировалось EPA; 26.07.2019 в 22:20.
EPA вне форума   Ответить с цитированием
Старый 26.07.2019, 23:30   #9
ahalam Меню Пользователя
Резидент клуба
 
Аватар для ahalam
 
Регистрация: 04.12.2012
Сообщений: 42
По умолчанию Re: функция "make8()" как развернуть в обратную сторону?

ОК! ставлю, но главный вопрос остался без ответа - библиотека для работы с USB. Не USB-COM и не COM-USB а просто USB-USB без COM? Я еле напетлял какое то инфо по libusb, что б хоть как то начать. Собирал свою программку на С из двух лекций. Одна лекция была на пайтоне, вторая на С++ . Инфы ноль!
__________________
in hope of deliverance

Последний раз редактировалось ahalam; 26.07.2019 в 23:35.
ahalam вне форума   Ответить с цитированием
Старый 26.07.2019, 23:48   #10
EPA Меню Пользователя
Супер Модератор
 
Аватар для EPA
 
Регистрация: 01.11.2016
Сообщений: 1,332
По умолчанию Re: функция "make8()" как развернуть в обратную сторону?

В высокоуровневых языках программирования библиотек нет, там все построенно на классах. А в твоем случае это класс SerialPort.
A USB - это типа тотже COM.
И в IDE Visual Studio сама тебе предложит типа если хочешь работать с СОМ , то я тебе автоматом поставлю в код пространство имен System.IO.Ports.

http://phreakerclub.com/forum/showthread.php?t=2680
EPA вне форума   Ответить с цитированием
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.



Текущее время: 20:16. Часовой пояс GMT +3.


vBulletin 4.1.0 Перевод: zCarot
(C) www.phreakerclub.com
Яндекс.Метрика