Опуская лирику могу сказать чем конкретно мне не понравился Bascom -
На нем хорошо писать простые и быстрые проекты, сигнализацию какую нибудь, управление чем то по каким то условиям, ВКЛ/ВЫКЛ
И я затеял проект с поворотной антенной подумав, что в общем покрутить шаговик на нем самое оно, но уже потратив кучу времени на реализацию основного алгоритма пожалел, что не начал проект на СЯ-х,
объясню, в начале простой цикл, несколько кнопок, процедура управления двигателем, подсчеты шагов, деление умножение, в общем басик более менее годится, но когда пошел обвес, часы, КСВ метр, калибровки, датчики с разными шинами, радио, работа с памятью, прерывания, то тут уже если ко всему этому применить библиотеки баскома проект не влезет ни в одну Мегу, о скорости молчу, на простых проектах да Бас=СИ, но на тяжеловесных начинаешь в баскоме СИ-шить и ASM-мить, ибо опускаясь на уровень прерываний и шин, хрен, что на нем красиво (размер памяти и скорость) напишешь, так, что возражения и камни конечно принимаются, но после того как напишите проект с SPI, 1 wire, I2C, памятью, прерываниями с парой тройкой обработчиков, клавой в одном проекте.
И тогда можно предметно поговорить, сравнив объем кода и скорость чистого Баса для AVR против СИ-лесом
- - - Добавлено - - -
Вто например как на баском выгладит один только список переменных для датчика давления, температуры и высоты BOSH bmp180
Переменные
'***** переменные и константы датчика давления и температуры BMP180 *******************************************
Const Oversampling_setting = 1
Const Software_oversampling_setting = 1
Const R_ac1 = &HAA
Const R_ac2 = &HAC
Const R_ac3 = &HAE
Const R_ac4 = &HB0
Const R_ac5 = &HB2
Const R_ac6 = &HB4
Const R_b1 = &HB6
Const R_b2 = &HB8
Const R_mb = &HBA
Const R_mc = &HBC
Const R_md = &HBE
'Const Oss = &H74 '1-стандарт
Const Oss = &H34 ' 0-низкое потребление
'Const Oss = &Hb4 ' 2-точное измерение
'Const Oss = &Hf4 ' 3-супер точное
Const Term_180 = &H2E
Dim Ac1 As Integer , Mac1 As Byte At Ac1 + 0 Overlay , Lac1 As Byte At Ac1 + 1 Overlay
Dim Ac1a As Long
Dim Ac2 As Integer , Mac2 As Byte At Ac2 + 0 Overlay , Lac2 As Byte At Ac2 + 1 Overlay
Dim Ac3 As Integer , Mac3 As Byte At Ac3 + 0 Overlay , Lac3 As Byte At Ac3 + 1 Overlay
Dim Ac4 As Word , Mac4 As Byte At Ac4 + 0 Overlay , Lac4 As Byte At Ac4 + 1 Overlay
Dim Ac5 As Word , Mac5 As Byte At Ac5 + 0 Overlay , Lac5 As Byte At Ac5 + 1 Overlay
Dim Ac5a As Single
Dim Ac6 As Word , Mac6 As Byte At Ac6 + 0 Overlay , Lac6 As Byte At Ac6 + 1 Overlay
Dim Bb1 As Integer , Mb1 As Byte At Bb1 + 0 Overlay , Lb1 As Byte At Bb1 + 1 Overlay
Dim B2 As Integer , Mb2 As Byte At B2 + 0 Overlay , Lb2 As Byte At B2 + 1 Overlay
Dim B3 As Long
Dim B3a As Long
Dim B4 As Long
Dim B5 As Long
Dim B6 As Integer
Dim B6a As Long
Dim B7 As Long
Dim Mb As Integer , Mmb As Byte At Mb + 0 Overlay , Lmb As Byte At Mb + 1 Overlay
Dim Mc As Integer , Mmc As Byte At Mc + 0 Overlay , Lmc As Byte At Mc + 1 Overlay
Dim Mc2 As Long
Dim Md As Integer , Mmd As Byte At Md + 0 Overlay , Lmd As Byte At Md + 1 Overlay
Dim Adres As Byte
Dim Wert As Byte
Dim Ut As Long , Mut As Byte At Ut + 0 Overlay , Lut As Byte At Ut + 1 Overlay
Dim Xx1 As Long
Dim X1t As Single
Dim X2 As Long
Dim X3 As Long
Dim Tt As Single
Dim T2 As Long
Dim Temperatur As String * 6
Dim Luftdruck As String * 8
Dim Druck As Single
Dim Pp As Long
Dim P2 As Long
Dim 2potenz15 As Long
Dim 2potenz11 As Integer
Dim 2potenz13 As Integer
Dim 2potenz8 As Integer
Dim 2potenz4 As Integer
Dim 2potenz2 As Integer
Dim 2potenz16 As Long
Dim 2potenz12 As Integer
Dim Potenz5255 As Single
Dim Altitude As Single
Dim Altitudes As String * 8
Dim Msb As Long
Dim Lsb As Long
Dim Up As Long , Mup As Byte At Up + 2 Overlay , Lup As Byte At Up + 1 Overlay , Xlup As Byte At Up + 0 Overlay
Dim Druckvar As Byte
Declare Sub Berechne_temp
Declare Sub Berechne_druck
Declare Sub Schreibe_bmp085(byval Adres As Byte , Byval Wert As Byte)
Declare Sub Lese_roh_daten
Declare Sub Messen
Declare Sub Lese_bmp085n(byval Adres As Byte , Wert As Byte , Wept As Byte)[/SIZE][свернуть]
А это математика его на баском, по другому никак, и памяти сжирает ужас сколько.
bmp180
'************************************************ работа с датчиком bmp180 *********************************************
P_bmp180:
Gosub Измерение
Tt = Tt / 10
Temperatur = Fusing(tt , "###.#")
Potenz5255 = 1 / 5.255
Altitude = Pp / 101325
Altitude = Altitude ^ Potenz5255
Altitude = 1 - Altitude
Altitude = Altitude * 44330 'Altitude * 44330 коофициент для корректировки высоты
Druck = Pp
Druck = Druck / 133.3224 'перевести паскали в мм ртутного столба
'Druck = Druck * 0.0075 '
'Druck = Druck / 100 '
Luftdruck = Fusing(druck , "####.#")
Altitudes = Fusing(altitude , "#####.#")
If Lcd_menu = 0 Then
Call D3310position(0 , 3)
Call D3310print( "Pr: ")
Call D3310print(luftdruck)
Call D3310position(0 , 2)
Call D3310print( "Ht: ")
Call D3310print(temperatur)
'Lcd "Alt-" ; Altitudes
End If
Return
Измерение:
'Измерение температуры
Call Schreibe_bmp085(&Hf4 , Term_180)
Adres = &HF6
Call Lese_bmp085n(adres , Lut , Mut)
Call Berechne_temp
Call Schreibe_bmp085(&Hf4 , &HB4 )
Adres = &HF6
Call Lese_bmp085n(adres , Mup , Lup )
' "для использования точного измерения давления раскоментировать строки."
'I2cstart
'I2cwbyte Addr_schreiben
'I2cwbyte &HF8
'I2cstart
'I2cwbyte Addr_lesen
'I2crbyte Xlup , Nack
'I2cstop
'Print Bin(up)
'***********************************************************************
Shift Up , Right , 5
Call Berechne_druck
Return
Sub Lese_bmp085n(byval Adres As Byte , Wert As Byte , Wept As Byte)
I2cstart
I2cwbyte Addr_schreiben
I2cwbyte Adres
I2cstart
I2cwbyte Addr_lesen
I2crbyte Wert , Ack
I2crbyte Wept , Nack
I2cstop
'Waitms 15
End Sub
Sub Schreibe_bmp085(byval Adres As Byte , Byval Wert As Byte)
I2cstart
I2cwbyte Addr_schreiben
I2cwbyte Adres
I2cwbyte Wert
I2cstop
Waitms 30
End Sub
Sub Berechne_temp
'X1
Ut = Ut - Ac6
2potenz15 = 32768 '2 ^ 15
Ac5a = Ac5 / 2potenz15
X1t = Ut * Ac5a
'X2
2potenz11 = 2048 ' 2 ^ 11
Mc2 = Mc * 2potenz11
X3 = X1t + Md
X2 = Mc2 / X3
'B5
B5 = X1t + X2
'T
2potenz4 = 16 ' 2 ^ 4
T2 = B5 + 8
Tt = T2 / 2potenz4
End Sub
Sub Berechne_druck
'B6
B6 = B5 - 4000
'X1
2potenz12 = 4096 ' 2 ^ 12
B6a = B6 * B6
B6a = B6a / 2potenz12
Xx1 = B2 * B6a
Xx1 = Xx1 / 2potenz11
'X2
X2 = Ac2 * B6
X2 = X2 / 2potenz11
'X3
X3 = Xx1 + X2
'B3
Ac1a = Ac1 * 4
Ac1a = Ac1a + X3
Shift Ac1a , Left , 3
Ac1a = Ac1a + 2
B3 = Ac1a / 4
2potenz13 = 8192 '2 ^ 13
B6a = B6 * Ac3
Xx1 = B6a / 8192
'X2 die zweite
B6a = B6 * B6
B6a = B6a / 2potenz12
X2 = Bb1 * B6a
2potenz16 = 65536 '2 ^ 16
X2 = X2 / 2potenz16
'X3 die zweite
X3 = Xx1 + X2
X3 = X3 + 2
2potenz2 = 4 ' 2 ^ 2
X3 = X3 / 2potenz2
'B4
B4 = X3 + 32768
B4 = B4 * Ac4
B4 = B4 / 2potenz15
If B4 <= 0 Then B4 = B4 * -1
'B7
B7 = Up - B3
B3a = 50000
Shift B3a , Right , 3 '
B7 = B7 * B3a
If B7 <= 0 Then B7 = B7 * -1
If B7 < &H80000000 Then
Pp = B7 * 2
Pp = Pp / B4
Else
Pp = B7 / B4
Pp = Pp * 2
End If
2potenz8 = 256 '2 ^ 8
P2 = Pp / 2potenz8
Xx1 = P2 * P2
Xx1 = Xx1 * 3038
Xx1 = Xx1 / 2potenz16
' nochmal X2
X2 = -7357 * Pp
X2 = X2 / 2potenz16
P2 = Pp
Pp = X2 + 3791
Pp = Pp + Xx1
Pp = Pp / 2potenz4
Pp = Pp + P2
End Sub[свернуть]
И после этого не соглашусь, что нервный срыв будет у СИ-шника
Я совершенно не против баса, но каждому короблю как говорится...
- - - Добавлено - - -
PS по секрету CodeVision AVR тоже поддерживает ардуинку+USB







, и памяти сжирает ужас сколько.
Ответить с цитированием