Web-свалка на RTL871x

pvvx

Активный участник сообщества
У меня они стоят и работают, мне не надо никуда ходить. На Win7, но, думаю, что и на Win10 будут. Впрочем, перенос проектов с HiTech на xc8 - не только не сложен, но и полезен. xc8 находит довольно нелепые ошибки, которые HiTech пропускал, вроде незакрытых комментариев. Не так давно, я даже HiTech 9.83 ставил, для совсем старого проекта, лет 12, наверное прошло, если не больше. Компилирует, и даже крак подходит по-прежнему. Хотя он-то, как раз, купленный был, даже CD болтается, вот только дисковод искать лень. И не надо посылать качать все версии, покажите ту одну, с которой у вас проблемы, не исключено, что они только у вас.
Код:
HI-TECH C Compiler for PIC10/12/16 MCUs  V9.83
Copyright (C) 2011 Microchip Technology Inc.
И последний их стоит
Код:
HI-TECH PICC COMPILER (Microchip PICmicro)  V9.60PL2
Copyright (C) 1984-2008 HI-TECH SOFTWARE
И xc8
Код:
 Directory of C:\Program Files (x86)\Microchip\xc8
06/21/2016  16:43    <DIR>          v1.37
09/24/2017  11:52    <DIR>          v1.44
И xc32 v1.31, v1.40 и v1.44.

И все они работают, даже
Код:
 C:\mcc18\bin>mcc18
Portions Copyright 1989, 1990  James  A.  Roskind
Usage: mcc18 [options] file [options]
Хотя, кажется, живых проектов на нем не осталось.
Вам уже ответил - setup у них не пашет - шлет ошибки в microsoft.
И вы бы ещё какую другую реликвию нашли, которую уже не купить. Почему не Win3.11 и PC 486DX?
И при чем тут ваши ошибки? У них разный код обработки прерываний и прочего. От версии к версии есть зависимости. HiTech принципиально не стыкуется с микрочиповскими, включая xc - до моделей стека.
 
Последнее редактирование:
Вам уже ответил - setup у них не пашет - шлет ошибки в microsoft.
И вы бы ещё какую другую реликвию нашли, которую уже не купить. Почему не Win3.11 и PC 486DX?
Пашет у них setup, говорю же, ставил относительно недавно, в 15 году. И Win7 - не реликвия, найти его - ни малейшей проблемы, впрочем, завтра на Win10 проверю.
 

pvvx

Активный участник сообщества
Пашет у них setup, говорю же, ставил относительно недавно, в 15 году. И Win7 - не реликвия, найти его - ни малейшей проблемы, впрочем, завтра на Win10 проверю.
Вот и проверьте HI-TECH C Archive
ftp://Compilers-RO:C0mP!0511@ftp.microchip.com/
И активация у них производится через setup.exe --..., которого у вас нет на криво-кракнутой версии.
 
Последнее редактирование:
Вот и проверьте HI-TECH C Archive
ftp://Compilers-RO:C0mP!0511@ftp.microchip.com/
И активация у них производится через setup.exe --..., которого у вас нет на криво-кракнутой версии.

Как я и предполагал, никаких проблем с компилятором 11 года на Win10 нет. Прекрасно ставится.

Код:
Microsoft Windows [Version 10.0.14393]
(c) 2016 Microsoft Corporation. All rights reserved.
C:\Program Files (x86)\HI-TECH Software\PICC\9.83\bin>
C:\Program Files (x86)\HI-TECH Software\PICC\9.83\bin>picc --help
(1273) Omniscient Code Generation not available in Lite mode (warning)
HI-TECH C Compiler for PIC10/12/16 MCUs (Lite Mode)  V9.83
Copyright (C) 2011 Microchip Technology Inc.
Compiler Options:
Крак, если надо, делается потом, на уже поставленный компилятор, сетап при этом совершенно стандартный.
Код:
HI-TECH Universal RSA Keygen v2.2
=================================
* HI-TECH Universal RSA Keygen generates real RSA signed activation data.
* Replaces HI-TECH RSA public key with self-generated RSA key - different every time!
* Generates permanent key - no expiry date!
* Tested with: HI-TECH C Compiler for PIC10-12-16 MCUs
               HI-TECH C PRO for the PIC18 MCU Family
               HI-TECH C PRO for the PIC32 MCU Family
               HI-TECH for dsPIC-PIC24
               HI-TECH C PRO for the Silicon Labs 8051 MCU Family
               HI-TECH C PRO for the PSoC Mixed-Signal Array
               HI-TECH C for Holtek MCU
               HI-TECH PICC-18 STD
1. Install software.
2. Select Activate PRO/Standard mode with serial number & make up your own serial number.
   e.g. 654321
3. Tick Off-Line - activation will be completed by email.
4. When software has finished installing run HI-TECH.exe and point to your activation-request.txt file.
   e.g. HCPICP-654321-activation-request.txt file in installation folder.
NOTE TO VISTA & WINDOWS 7 USERS
-------------------------------
If you have used other HI-TECH keygens/patches in the past they may have written data to your VirtualStore.
The HI-TECH data in your VirtualStore takes precedence over global data when present and must be removed.
Run CLEAN.BAT to remove this data; it will do no harm if you have not used HI-TECH keygens/patches before.
You can run CLEAN.BAT before or after the HI-TECH Universal RSA Keygen.
CLEAN.BAT removes the following keys from the registry:
[HKEY_CURRENT_USER\Software\Classes\VirtualStore\MACHINE\SOFTWARE\Wow6432Node\HI-TECH Software]
[HKEY_CURRENT_USER\Software\Classes\VirtualStore\MACHINE\SOFTWARE\HI-TECH Software]
and the following folders:
%LOCALAPPDATA%\VirtualStore\Program Files (x86)\HI-TECH Software
%LOCALAPPDATA%\VirtualStore\Program Files\HI-TECH Software

Пробовать все, что лежит в микрочиповсом архиве я не вижу смысла, результат, очевидно, будет тот же. Все XC версии ставятся так же родным сетапом, потом, если нужно, кракаются одним и тем же краком.
Код:
MPLABо XC v1.32 Replacement XC License Manager
==============================================
Windows
-------
Find xclm.exe file in compiler's bin folder, rename to xclm.old and copy replacement xclm.exe file to bin folder.
Run xclm.exe once as administrator to patch compiler with new SHA hash.
 
И вы бы ещё какую другую реликвию нашли, которую уже не купить. Почему не Win3.11 и PC 486DX?
И при чем тут ваши ошибки? У них разный код обработки прерываний и прочего. От версии к версии есть зависимости. HiTech принципиально не стыкуется с микрочиповскими, включая xc - до моделей стека.
Что до Win7, то вот он прямо на сайте MS Download Windows 7 Disc Images (ISO Files). Код обработки прерываний я могу, в принципе, посмотреть, только на фига, какая мне разница какой там код? Я не пишу компиляторозависимых программ, во всяком случае, стараюсь. А синтаксис там тот же, и XC8 - это именно переделанный HT, совместимый с ним по синтаксису расширений языка. И у PIC16 (10/12) есть только стек возвратов, никакого другого стека нет, автоматические переменные - это просто повторно используемые статические. В абсолютно любом компиляторе для этой архитектуры, она другого не позволяет.
 

pvvx

Активный участник сообщества
Что до Win7, то вот он прямо на сайте MS Download Windows 7 Disc Images (ISO Files). Код обработки прерываний я могу, в принципе, посмотреть, только на фига, какая мне разница какой там код? Я не пишу компиляторозависимых программ, во всяком случае, стараюсь. А синтаксис там тот же, и XC8 - это именно переделанный HT, совместимый с ним по синтаксису расширений языка. И у PIC16 (10/12) есть только стек возвратов, никакого другого стека нет, автоматические переменные - это просто повторно используемые статические. В абсолютно любом компиляторе для этой архитектуры, она другого не позволяет.
Вы опять про что? Про 8-ми битные на старом компе, где ставится Win98? Там на СИ никто не писал. Ну разве что "Hello World". О чем с вами говорить, читайте мануалы про прерывания и сохранения регистров - может тогда и прозреете.
Потом сходите в магазин и купите комп, да нем попробуйте поставить что из этих компиляторов.
Вы даже это не смогли протестить, а мне разбираться в причинах их вылета на многих компах нет особого желания. Ставить маленькие диски и допотопные FAT32 системы - может оно только там и работает - вот и разберитесь.
Из ваших соо я только понял, что у вас совсем беда там в Израиле. Одно старьё и нищета.
 
Последнее редактирование:
Вы опять про что? Про 8-ми битные на старом компе, где ставится Win98?
Я про те, которые вы не смогли поставить, а у меня ставятся без проблем.

Там на СИ никто не писал.
Вы, может, в 98 еще и не писали, я уже несколько лет как писал, как раз в 98 и для PIC16.

Ну разве что "Hello World". О чем с вами говорить, читайте мануалы про прерывания и сохранения регистров - может тогда и прозреете.
Регистров? Можно поинтересоваться каких (в смысле, какая разница в версиях)? И какое это вообще имеет значение для программы на C? Впрочем, еще проще вопрос, нижеприведенные цитаты из документации к каким версиям компиляторов относятся?
Enhanced Mid-Range PIC devices save the W, STATUS, BSR and FSRx registers in
hardware (using special shadow registers) and hence these registers do not need to
be saved by software. In fact, the compiler will never have to produce code to save any
other registers when compiling for an Enhanced Mid-Range as no additional registers
are ever used. This makes interrupt functions on Enhanced Mid-Range PIC devices
very fast and efficient.
Other Mid-Range PIC processors only save the entire PC (excluding the PCLATH reg-
ister) when an interrupt occurs. The the W, STATUS, FSR and PCLATH registers and
the BTEMP 1 pseudo register must be saved by code produced by the compiler, if
required.
Enhanced mid-range PIC devices save the W, STATUS, BSR and FSRx registers in
hardware (using special shadow registers) and hence these registers do not need to
be saved by software. The registers that might need to be saved by software are the
BTEMP registers 1 , compiler temporary locations that act like registers.
Other mid-range PIC processors only save the entire PC (excluding the PCLATH reg-
ister) when an interrupt occurs. The W, STATUS, FSR and PCLATH registers and any
BTEMP registers must be saved by code produced by the compiler, if required.
Потом сходите в магазин и купите комп, да нем попробуйте поставить что из этих компиляторов.
Я уже попробовал. Все, что мне нужно, ставится, стоит, и работает.

Вы даже это не смогли протестить,
Это не я не смог протестить (на фига мне тестить чужие компиляторы), а вы поставить. А я, как раз, смог и поставить и использовать, даже не подозревая, что это, оказывается, для кого-то большая проблема.

Ставить маленькие диски и допотопные FAT32 системы - может оно только там и работает - вот и разберитесь.
Ну да, Win10/64 (равно как и Win7/64) у меня, "конечно" на FAT32, какую еще чушь придумаете? Впрочем, компилятору-то какая разница что там у OS за FS?

Из ваших соо я только понял, что у вас совсем беда там в Израиле. Одно старьё и нищета.
Каждый понимает в меру своих способностей.
 
Последнее редактирование:

Алексей.

Active member
И вопрос снова - куда в makefile впихнуть (и что?), чтобы автоматически сработал доступ к COM портам у пользователя.
Так тоже не очень:
echo 'KERNEL=="ttyS[0-9]*",MODE="0666"' | sudo tee '/etc/udev/rules.d/50-myusb.rules
Поиграл я немного в wsl, демона на старте не запустить, режим установленный для /dev/ttyS* сбрасывается, значит хранятся только в памяти.
Для установки режима tty сделал совсем простой скрипт в /opt/chmod-tty
printf '#!/bin/sh\nchmod 666 /dev/ttyS?\n' | sudo tee /opt/chmod-tty
сделал его исполняемым
sudo chmod +x /opt/chmod-tty
в /etc/sudoers добавил запись которая позволяет выполнять этот скрипт от sudo без запроса пароля
alex ALL=(ALL) NOPASSWD: /opt/chmod-tty
ну и для проверки простой Makefile
Код:
all: chmodtty

chmodtty:
   sudo /opt/chmod-tty
смотрим режим для /dev/ttyS?
alex@DESKTOP-FAPE8P5:~$ ls -l /dev/ttyS?
crw-r----- 1 root root 4, 66 Mar 18 14:11 /dev/ttyS2
crw-r----- 1 root root 4, 67 Mar 18 14:11 /dev/ttyS3
crw-r----- 1 root root 4, 68 Mar 18 14:11 /dev/ttyS4
crw-r----- 1 root root 4, 69 Mar 18 14:11 /dev/ttyS5
crw-r----- 1 root root 4, 70 Mar 18 14:11 /dev/ttyS6
crw-r----- 1 root root 4, 71 Mar 18 14:11 /dev/ttyS7
crw-r----- 1 root root 4, 72 Mar 18 14:11 /dev/ttyS8
crw-r----- 1 root root 4, 73 Mar 18 14:11 /dev/ttyS9
выполняем мейк
alex@DESKTOP-FAPE8P5:~$ make
sudo /opt/chmod-tty
смотрим режим ещё раз
alex@DESKTOP-FAPE8P5:~$ ls -l /dev/ttyS?
crw-rw-rw- 1 root root 4, 64 Mar 18 14:11 /dev/ttyS0
crw-rw-rw- 1 root root 4, 65 Mar 18 14:11 /dev/ttyS1
crw-rw-rw- 1 root root 4, 66 Mar 18 14:11 /dev/ttyS2
crw-rw-rw- 1 root root 4, 67 Mar 18 14:11 /dev/ttyS3
crw-rw-rw- 1 root root 4, 68 Mar 18 14:11 /dev/ttyS4
crw-rw-rw- 1 root root 4, 69 Mar 18 14:11 /dev/ttyS5
crw-rw-rw- 1 root root 4, 70 Mar 18 14:11 /dev/ttyS6
crw-rw-rw- 1 root root 4, 71 Mar 18 14:11 /dev/ttyS7
crw-rw-rw- 1 root root 4, 72 Mar 18 14:11 /dev/ttyS8
crw-rw-rw- 1 root root 4, 73 Mar 18 14:11 /dev/ttyS9

Ну как то так, для смены режима пароль не вводим.

ПС
добавил в ~/.bashrc строчку
sudo /opt/chmod-tty
теперь можно из мейкфайлов настройка режима /dev/ttyS* выкинуть
 
Последнее редактирование:

pvvx

Активный участник сообщества
Поиграл я немного в wsl, демона на старте не запустить, режим установленный для /dev/ttyS* сбрасывается, значит хранятся только в памяти.
....
Ну как то так, для смены режима пароль не вводим.
Уже всё работает, с указанием от вас, что можно забить запрос пароля у sudo.
Демона, чтобы настройки сохранялись между вызовами wsl из других задач win запускаете в другой сессии или можно прописать в ~/.profile.

+ вариант cerebrate/wabash
 
Последнее редактирование:

pvvx

Активный участник сообщества
Я про те, которые вы не смогли поставить, а у меня ставятся без проблем.
Перестаньте тратить чужое время на разъяснение вам всякой чуши.
В Win10 указанное запускается только в VirtualBox или Hyper-V и типа:
Снимок3.gif
В Win10 вы получите:
Снимок2.gif
Что там у них с кривой защитой и ключами твориться, или другими бедами, что работать не может - это сами вычисляйте. Тем более ошибки там "плавающие" и не одна.
На Вынь7 таких бед нет на всех компах, но на современном компе с windows это не прокатит.

Вы походу прилезли сюда рассказать о своей тупости или какой болезни мозгу?
Вам простым языком не понятно, что если ПО содержит нестандартный подход, то не дай Бог вам потребуется через пару лет что менять в том проекте по уговорам заказчика. Но видимо вам это не грозит, т.к. работающих проектов у вас мало или вообще нет.
Это вам не махнуть пару строк скрипта сборки в WSL, а будете бегать и искать свой любимый антиквариатный комп, на котором оно пойдет... :
 
Последнее редактирование:
Перестаньте тратить чужое время на разъяснение вам всякой чуши.
Чушь тут преимущественно от вас, в товарных количествах, во что ваш нос и был ткнут, не трепыхайтесь, нюхайте. Расскажите еще про обработку прерываний в pic16.

На Вынь7 таких бед нет на всех компах, но на современном компе с windows это не прокатит.
Это не "современный", а неисправный комп и/или Windows. Нет проблем с Win7, его и ставьте, ему хоть цвет и стиль нормальный окнам сделать можно, в отличие от Win10.

Вы походу прилезли сюда рассказать о своей тупости или какой болезни мозгу?
Да нет, подсократить потоки вашего бреда.

Вам простым языком не понятно, что если ПО содержит нестандартный подход
Нестандартный подход - это найти совершенно стандартное нативное приложение 10летней давности и сокрушаться, что спустя три версии OS и 5 поколений CPU лично у вас что-то не заработало без Virtual Box? Тоже мне проблема. Только это ваш подход, а не мой. У меня просто на всякий случай лежит тот комп, на котором это когда-то делалось, просто мне на своем удобней, в той среде, где я работаю сейчас, а не 10 лет назад.

то не дай Бог вам потребуется через пару лет что менять в том проекте по уговорам заказчика.
У меня и через 10 лет нет проблем ни на современный компилятор перенести, ни старый поставить. Это у вас там что-то вечно не работает.

Но видимо вам это не грозит, т.к. работающих проектов у вас мало или вообще нет.
Это вам не махнуть пару строк скрипта сборки в WSL, а будете бегать и искать свой любимый антиквариатный комп, на котором оно пойдет... :
WSL - это вообще костыли, нормальные производители нормального железа (процессоров) делают нативные средства разработки под Windows, иногда платные, иногда нет. Сами, и/или третьих фирм. И никакие ни WSL, ни mingw ни виртуальные машины с линуксом им вовсе не нужны. Вместе с совершенно безумной связкой программ, авторства (и поддержки) которых не найдешь никогда. Все, кого ни возьми, кроме Espressif. Но для него можно, конечно, и Linux на комп поставить, не бог весть задача в 2018 году, 20 лет назад это сложнее делалось, сегодня оно само.
 

pvvx

Активный участник сообщества
Расскажите еще про обработку прерываний в pic16.
Вам это точно надо? И тут не в курсе? Ответ уже был, можно уточнить - в PIC18 на Hi на разных версиях по разному сохраняются то часть регистров, то все. Он то отслеживает использование, регистров то нет в коде СИ прерываний. По этому в проектах есть вставки ручного сохранения регистров в зависимости от версий. Это только часть. Остальное вам уже указано - разная организация симуляции "стека".
Так-же классического ничего нет в данных компиляторах СИ. Во первых там не полный СИ, да и сильно зависимый и заточенный под конкретный контроллер, что дает непереносимый код. Вы это тоже оспариваете по безграмотности.
Да нет, подсократить потоки вашего бреда.
И что выяснили? Что вы лажанулись на каждом шагу и вас как котенка тыкают носиком в собственную лужу? :)
Задели вашу дурную фобию? :) :) Лечитесь.
Та и вы с каждым постом всё больше и больше веселите. Тот-же МикроЧип в итоге пришел к gcc, а не к своему компилятору и системе... Т.е. его бардак пашет в WSL.
Вам любой заказчик ответит, что ему пофиг до ваших древних компов и если вы не в состоянии сделать дело на имеющемся в наличии (в любом магазине напротив), то и нафиг не нужны со своими привычками и фобиями.

Цвет менюшек ему не понравился :) Яподсталом…
Во – таблетку вам нашел: Чего боятся программисты?
 
Последнее редактирование:
Вам это точно надо? И тут не в курсе? Ответ уже был, можно уточнить - в PIC18 на Hi на разных версиях по разному сохраняются то часть регистров, то все.
Я вам привел цитаты из документации, читать не умеете :)

Он то отслеживает использование, регистров то нет в коде СИ прерываний. По этому в проектах есть вставки ручного сохранения регистров в зависимости от версий.
Не лазьте шаловливыми руками в регистры, тем более, что их там полторы штуки всего. Нет там никакой зависимости от версий.

Это только часть. Остальное вам уже указано - разная организация симуляции "стека".
И опять же, указано неверно.

Так-же классического ничего нет в данных компиляторах СИ.
Классического? Вы с театром не перепутали?


Во первых там не полный СИ, да и сильно зависимый и заточенный под конкретный контроллер, что дает непереносимый код.
И что? Тоже мне новость. Только он не непереносимый, а переносимый с большими трудозатратами. Но любой код для микроконтроллеров привязан и к архитектуре ядра и к периферии, и без адаптации не переносим.

Вы это тоже оспариваете по безграмотности.
Нет, это вы мне это приписываете по глупости своей (все же ходы записаны).

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


Та и вы с каждым постом всё больше и больше веселите. Тот-же МикроЧип в итоге пришел к gcc, а не к своему компилятору и системе...
Для pic10..pic18 он купил и продолжает развивать HiTech, XC8 - это он и есть. Для pic32 да, они портировали gcc, но безо всяких WSL.

Т.е. его бардак пашет в WSL.
Точнее, в Linux, как и HiTech для него был.


Вам любой заказчик ответит, что ему пофиг до ваших древних компов
Заказчику вообще глубоко пофиг на чем я работаю, он устройство заказывает, а не компы.

Цвет менюшек ему не понравился :)
Да, 20 был один цвет, а потом поменяли и не изменить.
 

pvvx

Активный участник сообщества
Я вам привел цитаты из документации, читать не умеете :)
А зачем мне читать то, что уже не используется? :eek: Там написана поддержка HiTech для windows 10?
Что вы балабол, с огромным гонором, но очень ограниченным опытом и знаниями, склонный с скоропалительным выводам и безосновательным обобщениям, начинающий хамить при любом указании на ваши ошибки.
Это вы про себя?
Т.е. уже оно заработало на Вынь10 - ошибки исправили? :) Или всё-таки вы в очередной раз ошиблись, т.к. нет ни опыта, ни знаний по разным железкам и окружающим их ПО, кроме одной вашей поделки на 8-ми битном PIC? :D
Для pic10..pic18 он купил и продолжает развивать HiTech, XC8 - это он и есть. Для pic32 да, они портировали gcc, но безо всяких WSL.
А чё такое WSL? Как его "портировать"? :confused:
Да, 20 был один цвет, а потом поменяли и не изменить.
Там переключалки есть - можно сделать всё черно-былым... Платную документацию написать?
---
Вылез из подстола...
Как тут без гонора, если пишет какой-то вася из бобруйска, который вообще ни в чем не разбирается и не может решить ни одной задачи, но уже сильно больной фобией начинающего программера. :) :)
Вы существуете тут только за счет меня, т.к. я поддерживаю с вами разговор, а вам надо внимание, как любому старому и больному... Никому не интересен ваш устаревший 8-ми битный PIC, а людей интересуют решения, а не ваши завывания. У многих их было сотни и хоять и лилеять какую-то железку никто не будет, тем более хранить для этого комп, на котором был слеплен проект десяток лет назад. :)
Как пример - пока вы завывали, мы тут решили вопрос COM портами в WSL, который висит уже более полугода на массе ресурсов в инет...
 
Последнее редактирование:
А зачем мне читать то, что уже не используется?.
Вам и правда ни к чему, не в коня корм.

:eek: Там написана поддержка HiTech для windows 10?
Конечно, одна из этих цитат от последней версии XC8 (недавно вышла). Другая, от HiTech 11 года, но вам-то невдомек.
 

pvvx

Активный участник сообщества
Вам и правда ни к чему, не в коня корм.
Не в тему. Тут про web-свалку, если ещё не заметили :)
Конечно, одна из этих цитат от последней версии XC8 (недавно вышла). Другая, от HiTech 11 года, но вам-то невдомек.
Не вижу у HiTech надписи "работает в Windows 10".
Вам пора собираться в общую кучу бегающих тут за мной папарацци - объединяйтесь с =AK=. Так будет легче окучивать - сразу оптом. :)
 
Не вижу у HiTech надписи "работает в Windows 10".
Современные версии HiTech называются XC.
What are the minimum system requirements for installation of the MPLAB XC Compilers?
Microsoft Windows 7 Professional/Windows 8/Windows 10

Processor: 800 MHz Intel Pentium III or equivalent
Memory: 512 MB
Впрочем, под Win10 работают и старые у всех, кроме вас.
 

aloika

Active member
Хочу немного обсудить принцип работы с websocket в данной свалке, с целью прояснить это для себя, а то не могу до конца осмыслить.

Насколько я понял, сейчас примеры от pvvx работают в общих чертах следующим образом (поправьте, плз, если не так):

1. Web-страница открывает вебсокет и отправляет команду (команды) и ждет ответа. Приходит ответ - страница его интерпретирует и как-то отображает и т.д.
2. После ответа страница через некоторое время снова отправляет команду и снова ждет ответа и т.д.

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

А почему нельзя сделать так - вот есть какое-нибудь, допустим прерывание (по приему символа в уарт, например). И по прерыванию этот символ отправлять в вебсокет, без дополнительного запроса со стороны страницы. Мне казалось, что этим вебсокет и ценен - отправить сообщение могут обе стороны по своей инициативе, безо всякого запроса-опроса, который поллинг напоминает (и в чём тогда интерес, непонятно).

Попробовал написать что-то такое примитивное - не работает. Видимо, что-то фундаментальное упускаю.

Вот смотрите:

В web_int_callback.c добавляю:

Код:
#ifdef WEB_UART
        else ifcmp("uart") {
              if(CheckSCB(SCB_WEBSOC)) {
extern int uart_ws(TCP_SERV_CONN *ts_conn, char cmd);
                 int x = uart_ws(ts_conn, cstr[4]);
                  if(x < 0) SetSCB(SCB_FCLOSE|SCB_DISCONNECT);
              }
        }
#endif

В другом файле пишу:

Код:
#include "device.h"
#include "serial_api.h"
#include "main.h"
#include "user/swingbed.h"
#include "web_srv.h"


#define UART_RX    PA_0

volatile char rc=0;

WEB_SRV_CONN *web_conn = NULL;

int uart_ws(TCP_SERV_CONN *ts_conn, char cmd)
{
    switch(cmd) {

    case 'l': { //запуск
        web_conn = (WEB_SRV_CONN *)ts_conn->linkd;
        tcp_puts_fd("UART on ws launched!"); // Это - работает.
        return 1;
        }

    case 's': { //останов
        tcp_puts_fd("UART on ws stoped.");
        web_conn = NULL;
        return 1;
        }
    default: {
        return -1;
    }

    } //switch

    return -1;
}

void uart_irq(uint32_t id, SerialIrq event)  // прерывание по приему символа в уарт
{
    serial_t    *sobj = (void*)id;

    if(event == RxIrq) {
        rc = serial_getc(sobj);
        if(web_conn!=NULL) {
                        tcp_puts("%02x", rc); // Вот это - не работает.
                        DBG_8195A(" %02x ", rc); // А это - работает.
        }     
    }
}

void uart_init(void)
{
 
    serial_t    sobj;
    serial_init(&sobj,UART_TX,UART_RX);
    serial_baud(&sobj,9800);
    serial_format(&sobj, 8, ParityNone, 1); 
    serial_irq_handler(&sobj, uart_irq, (uint32_t)&sobj);
    serial_irq_set(&sobj, RxIrq, 1); 

}
Почему так нельзя? web_conn в прерывании уже неактуальна?

Понятно, что можно символы накопить в буфере и по запросу их выдавать в функции uart_ws, так будет работать судя по всему.
 

pvvx

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

Насколько я понял, сейчас примеры от pvvx работают в общих чертах следующим образом (поправьте, плз, если не так):

1. Web-страница открывает вебсокет и отправляет команду (команды) и ждет ответа. Приходит ответ - страница его интерпретирует и как-то отображает и т.д.
2. После ответа страница через некоторое время снова отправляет команду и снова ждет ответа и т.д.

Т.е. идет диалог - запрос страницы, ответ модуля и т.д. Т.е. нужно всё время посылать запросы-команды, чтобы что-нибудь получить в ответ. Запросы должны идти с определенной периодичностью, ее надо прикидывать хотя бы, чтобы потерь данных не было и т.д., контролировать этот момент и прочее.
Это сделано по нескольким глобальным причинам:
1) Убрать тайм-ауйт TCP на 200 мс.
2) Не держать открытый сокет неизвестное время. Ограничение в web-свалке 5 сек на тишину в сокете, 5-ть - т.к. рассчитано на кривую сеть GSM. Далее соединение закрывается. + Старые NAT теряют соединение, если долго не проходят никакие пакеты...
3) Не терять PSB и не усложнять жизнь дополнительными указателями и проверками на закрытый сокет, win окно приемника, размеры буфера отправки LwIP, организации дублирующих буферов (которые могут занять память на неизвестное время - пока не выйдет тайм-аут соединения) ...
4) Для работы по событиям, а не поллингом. В данном случае память занимается только на момент отработки ответа, когда никакие другие соединения не прерывают ответ. Тем самым не возникает переполнения heap. Отработало частное событие стека Lwip и память опять пуста - готова для обработки другого события. Т.к. если пришел новый запрос, то это значит он подтвердил TCP ACK-ом прошлый ответ.
5) Из-за ограничений по памяти у данных MCU, на которые расcчитана Web-свалка ...
------
То, что вы ищите и жаждите, есть в проекте HTTPD. Там стандартный websocket на tcp socket LwIP c Keep-Alive...
 
Последнее редактирование:

aloika

Active member
То, что вы ищите и жаждите, есть в проекте HTTPD. Там стандартный websocket на tcp socket LwIP c Keep-Alive...
Т.к. этот проект я смотрел и работал он тогда нестабильно (может там что изменилось, конечно), продолжаю с веб-свалкой (да и вообще не сравнить, чё уж там).

Переделал пример приема данных с adc на прием данных с uart.
Попробовал вместо teechart вместо dygraph.

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

Пока обдумываю два варианта:
Первый - если бы был где-то список подключенных web-сокет клиентов, то можно был бы определять, кому что отправлять, кто что получил, кто не получил. Но это сложно. И так-то алгоритм сложный, а тут ещё сложнее будет.
Второй вариант - отправлять всем, не разбираясь, буфер целиком. И уже на стороне клиента разбирать - что принять к использованию, что отбросить.
 
Сверху Снизу