BASCOM 8051
Сообщений 61 страница 90 из 93
Поделиться622025-11-03 17:13:33
Удивлён отсутствием "никому не нужных" синусов и косинусов в 8051... Ладно, накидаем таблично.
Поделиться632025-11-03 18:13:11
А может и хорошо, что их нет ?
Они такие тормозные ... 
Скорость работы операторов Bascom
Пост #41
Поделиться642025-11-03 18:44:51
Пост #41
Ссылка на него чтобы долго не искать Скорость работы операторов Bascom
Функции тормозные потому что программная плавающая точка. Простая математика (сложение, вычитание, деление, умножение) выполняется тоже медленно.
Поделиться652025-11-03 21:24:56
Ещё и округления до целого нет. Тригонометрия и векторные преобразования в васике становятся всё интереснее.
Округляем пока так (для положительных чисел):
dim vs as single
dim vl as long
dim vb as byte
vs = 15.87'ДОПУСТИМ
vs = vs + 0.5
vl = vs
vb = vs
'"vb = vs" вызывает ошибку компилятора
' передача через переменную word тоже работает; разница по бинарнику 6 байт
Отредактировано Кот Обормот (2025-11-03 21:57:00)
Поделиться662025-11-03 22:11:56
'"vb = vs" вызывает ошибку компилятора
Так single в byte не поместится.
Округлять можно попробовать через Mod.
vs = 15.87'ДОПУСТИМ
vb = vs Mod 100
If vb > 50 Then
vs = vs + 0.5
End if
Ну как то так.
Отредактировано Andrusha (2025-11-04 00:36:42)
Поделиться672025-11-03 22:28:57
Удивлён отсутствием "никому не нужных" синусов и косинусов в 8051.
Да и я в АВР ни разу не применял - задачи не было ))
Один раз понадобился десятичный логарифм: а АВР есть, а в 8051 - нет, напрёгся.
Потом поменял алгоритм и сделал прямое преобразование значения АЦП в температуру по таблице.
Поделиться682025-11-04 12:09:27
Если 256 значений (может и больше, зависит от случая), то табличное значение удобнее и быстрее. А для других случаев (если в коде операции для работы с плавающей точкой уже используются) разложить на полиномы.
Отредактировано Кот Обормот (2025-11-04 12:09:53)
Поделиться692025-11-04 12:42:02
Какие-то слова неизвестные - полином, логарифм да еще и десятичный...
Еще со школы про них забыл... 
Поделиться702025-11-04 13:50:35
Так single в byte не поместится.
Для этого и нужно наложение переменных чтобы сразу в байтовую загонять при передаче в word\long.
Какие-то слова неизвестные - полином, логарифм да еще и десятичный...
Если полиномы пугают, то можно попробовать многочлены.
Отредактировано Кот Обормот (2025-11-04 14:03:32)
Поделиться712025-11-04 14:13:23
... то можно попробовать многочлены.
Ух ты ! 
Новые слова ! 
Не, это не ко мне...
Я "высшую арифметику" забыл сразу после получения аттестата и ни разу в жизни не пришлось применить. 
Поделиться722025-11-04 22:21:35
можно попробовать многочлены.
На ночь лучше не представлять чтобы кошмары не снились!

Поделиться732025-11-16 17:52:10
Опции BASE = 0 нет, поэтому допиливаем:
$regfile = "8H1K28.DAT"
$crystal = 35000000$romstart = &H0
$ramsize = 1024
$map
$largeDim Tst As Xram Byte
Dim Tst2 As Xram Byte
Dim Blnk_idx(8) As Xram Byte
Dim Pix_idx As Byte
Dim Arrp As Word
Dim Byte_val As Byte
Arrp = Varptr(blnk_idx(1))
Pix_idx = 0Do
$asm
mov r0, #{Pix_idx} ; Адрес переменной Pix_idx
mov a, @r0 ; Значение Pix_idx
mov r1, a ; Сохранить в r1
mov r0, #{ARRP} ; Адрес переменной Arrp
mov dpl, @r0 ; Младший байт адреса массива
inc r0
mov dph, @r0 ; Старший байт адреса массива
add a, dpl ; Индекс + базовый адрес
mov dpl, a
clr a
addc a, dph ; Учесть перенос
mov dph, a
mov a, r1 ; Значение для записи
movx @dptr, a
$end AsmIncr Pix_idx
Loop Until Pix_idx = 8
Pix_idx = 0
Do
$asm
mov r0, #{Pix_idx} ; адрес PIX_IDX
mov a, @r0 ; значение PIX_IDX
mov r1, a ; сохранили в r1
mov r0, #{ARRP} ; адрес ARRP (младший)
mov dpl, @r0 ; младший байт адреса массива
inc r0
mov dph, @r0 ; старший байт адреса массива
mov a, r1 ; индекс
add a, dpl ; индекс + база
mov dpl, a
clr a
addc a, dph
mov dph, a
movx a, @dptr ; прочитали из массива (в XRAM)
mov dptr, #{TST} ; загрузили адрес переменной TST
movx @dptr, a ; записали в TST (в XRAM)
$end Asm
Tst2 = Tst
Incr Pix_idx
Loop Until Pix_idx = 8Do
Loop
Первая вставка загоняет в массив (аналог blnk_idx(Pix_idx)=Pix_idx) значения [0...7]
Вторая читает (аналог Tst = blnk_idx(Pix_idx))
tst2 = tst' Контроль чтения
PIX_IDX Byte 0021 33
BYTE_VAL Byte 0024 36
ARRP Word 0022 34
TST Ext. Byte 0000 0
TST2 Ext. Byte 0001 1
BLNK_IDX Ext. Byte (8) 0002 2
Отредактировано Кот Обормот (2025-11-16 17:54:11)
Поделиться742025-12-12 17:50:40
Ещё косяк пойман. Не объявленную переменную bright_lb компилятор сожрал.
Поделиться752025-12-12 18:20:36
Не объявленную переменную bright_lb компилятор сожрал.
Прошивка нормально работала?
Поделиться762025-12-12 18:30:16
В симуляторе крутил. Через lookup не то значение брало, так и заметил. Хорошо только каркас программы проверял, а не всё сразу.
Поделиться772025-12-12 22:45:51
а можно пример кода?
Вставил - компилятор ругнулся!
Поделиться782025-12-13 08:22:46
Воспроизводится так: On_cnt = Lookup(bright_lb , Data_bright_flick)
On_cnt - word; Data_bright_flick - метка с данными.
Отредактировано Кот Обормот (2025-12-13 08:29:36)
Поделиться792025-12-13 12:07:57
А, СМОГ ДОБИТЬСЯ )) Да, не выдал ошибку!
Dim On_cnt As Word
On_cnt = Lookup(bright_lb , Data_bright_flick) 'Data_bright_flick - Метка С Данными.
Data_bright_flick:
Data 123 , 122 , 222 , 111 , 234
Отредактировано Александр Д. (2025-12-13 12:09:31)
Поделиться802025-12-13 12:20:18
написал в поддержку, с двух ящиков. Видимо, второй Марк забыл заблокировать и заявка сформировалась))
Your support ticket is : DMR-43168-266
...
Best regards,
MCS support team
MCS Electronics
Поделиться812025-12-13 12:31:07
Поэтому совет всем, кто решит потыкать палочкой в BASCOM-8051, каждую процедуру\блок\модуль проверять отдельно.
Хорошо я знал как должно работать так как перетаскивал с AVR и всё увидел сразу.
С помощью железного болвана найдена разница в результате компиляции:
Ошибочный код:
mov dptr,#X011d
lcall X00e7
→ Нет загрузки R4 и R5 индексом! Используется мусор из R4/R5.
→ Это означает, что bright_lb не загружается вообще — компилятор проигнорировал её.
Правильный код:
mov r4,23h
mov r5,#0
mov dptr,#X0121
lcall X00e7
→ Явно загружает R4 = [23h], R5 = 0, то есть использует байт из RAM по адресу 23h как индекс.
→ Это соответствует тому, что переменная bright_lb размещена по адресу 23h
Марку фофан.
Отредактировано Кот Обормот (2025-12-13 12:43:50)
Поделиться822025-12-13 16:19:39
попробуйте написать ему, как зарегистрированный пользователь
Поделиться832025-12-15 22:51:42
ответ Марка:
> hello Mark
>
> The compiler skipped an undeclared variable.
>
> Dim On_cnt As Word
>
> On_cnt = Lookup(*my_var*, Data_bright_flick)
>
> Data_bright_flick:
> Data 1, 2, 3, 4, 5
>
>
Hello Alexander
Can you please send a small but complete example that includes at least the $regfile directive?
And skipped you mean my_var was not dimmed and you got no error?
br
mark
ответил, выслал, ждём 
Отредактировано Александр Д. (2025-12-15 23:01:27)
Поделиться842025-12-16 06:30:01
ответ
Sorry but disassembly is not allowed or supported. I only need bascom basic code that demos the problem not assembly. Note that when the license is not official some flaws are automatic generated. that is why we only accept tickets from licensed users. and for that reason it is not allowed to create posts or tickets for other users.
Since you posted in the forum for another user and i do not know if you understand the rules i disabled your license temporarily. I will re-enable it of course but only when you understand the rules. if you help a friends it is ok but then i like to know the license number and the purpose of the programs.
As i explained before i am not a fan of war and stealing. And when the change exist code is used for bad things i only re-enable when i get a promise that bascom is used for the good and not the bad. It is written in the license agreement too but nobody reads it.
Now i know you are a good man and in fact you are the only reason that i continue with bascom-8051 chine chip development. due to circumstances i only had too little time. but i always do what i promise. it can only take long.
Поделиться852025-12-16 16:37:06
Note that when the license is not official some flaws are automatic generated.
Для Марка репутация баскома похоже что на последнем месте.
Представим что кто-то узнал о баскоме и решил на нем написать программу. Если все получится и будет нормально работать то возможно купит лицензию.
Но кто в здравом уме будет покупать лицензию на продукт который с багами и прога стабильно не работает? То есть Марк тем самым теряет потенциальных клиентов.
Поделиться862025-12-16 16:57:29
Новый2 шедевр от Марка:
Мне всё равно, если все клиенты уйдут.
Только немногие из России заплатили давно, остальные — воры, как и Путин.
Я дал вам возможность вести себя прилично, но вы этого не сделали, продолжая оскорблять.
У меня больше нет желания общаться с вами, поэтому считайте это моим последним письмом.
I do not care if every customer leaves.
There are only few from russia that paid long time ago the rest are thieves anyway just like putin.
i gave you the opportunity to behave correct but you didnt with further insults.
i have no further wish for communication with you so consider this my last email.
Пытаюсь понять, когда и чем я его ПРОДОЛЖАЛ ОСКОРБЛЯТЬ.
Отредактировано Александр Д. (2025-12-16 17:15:31)
Поделиться872025-12-16 16:58:46
Александр Д. написал(а):
Note that when the license is not official some flaws are automatic generated.
Для Марка репутация баскома похоже что на последнем месте.
Представим что кто-то узнал о баскоме и решил на нем написать программу. Если все получится и будет нормально работать то возможно купит лицензию.
Но кто в здравом уме будет покупать лицензию на продукт который с багами и прога стабильно не работает? То есть Марк тем самым теряет потенциальных клиентов.
я ему написал тоже самое!
Поделиться882025-12-16 17:16:57
Мне всё равно, если все клиенты уйдут.
Странная позиция.
Может Марк устал и хочет вообще прекратить разработку баскома? Неудивительно если он всем персонально оказывает техподдержку. Любой устанет от этого. Ему не следует это делать, предоставив возможность сообществу помогать друг другу.
Только немногие из России заплатили давно, остальные — воры, как и Путин.
То есть Марк не замечает истинных воров - тех кто "облизывается" на активы РФ и хочет обманом их присвоить (по сути украсть) и мечтает так или иначе победить РФ и разграбить ее?
Тут два варианта, или ему промыли мозги, или он такой же как те кто сейчас правят ЕС.
Пытаюсь понять, когда и чем я его ПРОДОЛЖАЛ ОСКОРБЛЯТЬ.
Неверное тем что несогласны с его позицией. А вообще, я давно понял что для Марка упоминание багов в баскоме, это оскорбление.
Поделиться892025-12-16 17:27:34
Только немногие из России заплатили давно
В этом он не прав.
У меня была лицензия, но она просроченная (в другой теме об этом писал). Я не против купить или продлить лицензию, но есть два момента.
1. Пренебрежительное отношение Марка и возможность в любой момент заблокировать лицензию только потому что ты из РФ или стран СНГ.
2. Из-за санкций стран запада, нет возможности осуществить платеж. Пусть Марк задаст вопрос своему правительству почему оно лишило его потенциальных клиентов и дохода.
Отредактировано Пётр (2025-12-16 17:28:23)
Поделиться902025-12-16 17:44:35
полностью согласен
Я покупал лицензию в январе через посредника, платил проценты.
Исключительно из уважения.
Ладно, спишем на старческий маразм и вспомним пословицу, что на дураков не обижаются (но будем помнить про вредительство в коде).
Жаль, не будет исправления его же ошибок и развития.
Жаль денег, потраченных на покупку разных МК 8051 и пересылку экспрессом в Голландию... И донаты разные как-то пару раз кидал...
И оказался дядька-пшик и брехун!
