ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Вторник
22 апреля
532122
Mahagam (18.07.2014 11:56, просмотров: 4612)
Да здравствует BASIC! долгое время я не лазил на сайт rowley. а тут слазил. надо же было посмотреть что они выкатили нового в ctl. в ctl особо и ничего. зато они наваяли BASIC. некая мистика. оно всё идёт в исходниках. более 300к само ядро. (тринадцать с половиной тыщ строк кода!!!) к этому всему идёт ещё сотня(!!) файликов "драйверов" различных устройств и просто расширения языка. например. пишут они драйвер графического дисплея с расширением набора токенов. фигачат дополнительные токены языка: #define NB_GRAPHICS_TOKENS \ NB_TOKEN("GFX", NB_TOKEN_GFX), \ NB_TOKEN("RED%", NB_TOKEN_RED_PERCENT), \ NB_TOKEN("GREEN%", NB_TOKEN_GREEN_PERCENT), \ NB_TOKEN("BLUE%", NB_TOKEN_BLUE_PERCENT), \ NB_TOKEN("COLOR$", NB_TOKEN_COLOR_STRING), \ NB_TOKEN("RGB", NB_TOKEN_RGB), \ NB_TOKEN("CLG", NB_TOKEN_CLG), \ NB_TOKEN("ORIGIN", NB_TOKEN_ORIGIN), \ NB_TOKEN("SCALE", NB_TOKEN_SCALE), \ NB_TOKEN("ANGLE", NB_TOKEN_ANGLE), \ NB_TOKEN("MOVE", NB_TOKEN_MOVE), \ NB_TOKEN("LINE", NB_TOKEN_LINE), \ NB_TOKEN("PLOT", NB_TOKEN_PLOT), \ NB_TOKEN("FILL", NB_TOKEN_FILL), \ NB_TOKEN("RECTANGLE", NB_TOKEN_RECTANGLE), \ NB_TOKEN("CIRCLE", NB_TOKEN_CIRCLE), \ NB_TOKEN("FONT", NB_TOKEN_FONT), \ NB_TOKEN("COLOR", NB_TOKEN_COLOR), \ NB_TOKEN("DRAW", NB_TOKEN_DRAW), \ NB_TOKEN("CONTRAST", NB_TOKEN_CONTRAST), \ NB_TOKEN("BACKLIGHT", NB_TOKEN_BACKLIGHT), \ NB_TOKEN("FORWARD", NB_TOKEN_FORWARD), \ NB_TOKEN("BACK", NB_TOKEN_BACK), \ NB_TOKEN("TURTLE", NB_TOKEN_TURTLE), \ NB_TOKEN("%BLACK", NB_TOKEN_PERCENT_BLACK), \ NB_TOKEN("%RED", NB_TOKEN_PERCENT_RED), \ NB_TOKEN("%GREEN", NB_TOKEN_PERCENT_GREEN), \ NB_TOKEN("%BLUE", NB_TOKEN_PERCENT_BLUE), \ NB_TOKEN("%YELLOW", NB_TOKEN_PERCENT_YELLOW), \ NB_TOKEN("%CYAN", NB_TOKEN_PERCENT_CYAN), \ NB_TOKEN("%MAGENTA", NB_TOKEN_PERCENT_MAGENTA), \ NB_TOKEN("%WHITE", NB_TOKEN_PERCENT_WHITE), \ NB_TOKEN("%COLOR", NB_TOKEN_PERCENT_COLOR) дальше идёт код под всё это и в конце висит примерчик:
   10 INSTALL "GRAPHICS-SHIELD"
   40 ORIGIN 160, 120
   50 FOR I = 1 TO 90 STEP 0.03
   60 COLOR RGB(RND 1, RND 1, RND 1)
   70 CALL SQUARE(I)
   80 TURTLE RIGHT 5
   90 NEXT I
  110 END
  120 DEFPROC SQUARE(N) USING I
  130 FOR I = 1 TO 4
  140 TURTLE FORWARD N; RIGHT 90
  150 NEXT I
  160 ENDPROC
или вот делают они компасс. в сишном файле вижу стандартную структуру для подключения драйвера в сам бейсик: const NB_DRIVER_t nb_tilt_compass_driver = { .specific_name = "TILT-COMPASS", .init = nb_tilt_compass_init, .fini = nb_tilt_compass_fini, .get = nb_tilt_compass_get }; а ниже пример использования:
   10 INSTALL "MPU-6050" AS IMU
   20 INSTALL "AHRS" USING IMU AS AHRS
   30 INSTALL "UART BAUD=19200" AS UART
   35 AHRS.B = 1
   40 FOR K = 1 TO 2000
   45 IF K = 250 THEN AHRS.B = 0.1 : PRINT "Range change"
   50 ' Get quaternion representation
   60 Q = AHRS.Q
   70 ' Convert it to an array
   80 V = [RE Q] & IM Q
   90 ' Now need to create strings for each real in the array
  100 TXT = ""
  110 FOR EACH I IN V
  120 TXT = TXT + REDUCE(&, HEX EXPAND MKF I) + ","
  130 NEXT I
  140 UART.WRITE = TXT + CHR(13) + CHR(10)
  150 'PRINT TXT; CHR(13); CHR(10);
  160 NEXT K
  170 END 
и таких вот дописанных и недописанных файлов - за сотню. вижу примеры расширения функционала языка, файликом добавляют токены DFT и IDFT в язык. большая часть всех расширений кажется пока что рассчитывается на поддержку ардуинных модульков. кроме бейсика ровлеевцы где-то или купили, или таки сами написали толстые либы TCP/IP и файловую систему (это они уже продают). и бейсик этот они разрабатывают как часть полной системы, с сетью и файловов системой!!! вот заметил файлик с расширением для сети. вижу в нём стуктуру: static const NB_DRIVER_t network_driver = { /* .specific_name = */ "NETWORK-DRIVER", /* .common_name = */ "NETWORK-DRIVER", /* .category = */ 0, /* .interfaces = */ 0, /* .init = */ 0, /* .fini = */ 0, /* .get = */ network_get, /* .set = */ network_set, /* .array_get = */ network_array_get, /* .array_set = */ network_array_set, }; и тут же расширения токенов языка: #define NB_NETWORK_TOKENS \ NB_TOKEN("NET", NB_TOKEN_NET), \ NB_TOKEN("MAIL", NB_TOKEN_MAIL), \ NB_TOKEN("DNS", NB_TOKEN_DNS), \ NB_TOKEN("IP$", NB_TOKEN_IP_STRING), \ NB_TOKEN("SOCKET", NB_TOKEN_SOCKET), \ NB_TOKEN("HELP", NB_TOKEN_HELP), \ NB_TOKEN("WEB", NB_TOKEN_WEB), \ NB_TOKEN("EXAMPLE", NB_TOKEN_EXAMPLE), \ NB_TOKEN("NEWS", NB_TOKEN_NEWS) вижу, что из бейсика можно будет отправить мыло! Evgeny_CD, что скажете? )))