SMS

SB> В основном потому, что Си налагает жесткие ограничения на типы используемых SB> данных. Что далеко ходить: даже элементарно строку переменной длины в структуру SB> не запихать.

А в ассемблере это можно сделать?

Reply to
Andy Mozzhevilov
Loading thread data ...

Hello, Serge Bryxin ! > IU> Лyчше бы поговоpили об алгоpитмах:)

А значения вводить как?

С уважением, Дима Орлов.

Reply to
Dima Orlov
Reply to
Dennis Opanasenko
Reply to
Alexander Derazhne
Reply to
Lev Serebryakov

Привет!

Mon, 19 Jan 2004 03:58:51 +0300, Maxim Polyanskiy писал:

Не продавала КТЦ-МК в 94-м ничего, т.к. не было её ещё тогда. В 95-м была и PIC'ами и AT89 (в том числе 2051) торговала во всю, но только не Motorola'ми, это лишь с 97-го.

Александр Голов, Москва, snipped-for-privacy@mtu-net.ru

Reply to
Alexander Golov
Reply to
Dennis Opanasenko
Reply to
Alexander Derazhne
Reply to
Alexander Torres
Reply to
Lev Serebryakov
Reply to
Maxim Polyanskiy
Reply to
Maxim Polyanskiy
Reply to
Maxim Polyanskiy

Dear Dima,

19 Jan 04 09:18, Dima Orlov wrote to Serge Bryxin:

DO> А значения вводить как?

Так же. Пусть (это достаточно стандартно) устанавливаемые цифры у нас перебираются кнопками Up/Dn, кнопка Ok прыгает между цифрами, кнопка Esc - выход. Тогда для состояния формы ввода кнопки Up/Dn/Ok будут отрабатываться как переход на то же самое состояние с функциями выхода из состояния, меняющими содержимое соответствующих переменных. После повторного входа в состояние новые значения автоматически отбразятся, об этом не надо думать. Кнопка Esc единственная указывает на другое состояние.

Вот например, как будет описываться пункт меню входа в установку таймера, и форма собственно установки:

mnu5: .dw SetTime_init,form1 ; Ok: инициализировать состояние и перейти .dw empty_func,top_evt ; Esc: ничего не делать, выйти из меню .dw empty_func,mnu4 ; Up: на предыдущий пункт меню .dw empty_func,mnu6 ; Dn: на следующий пункт меню .dw draw_menu_string ; ф-ция отрисовки (одна для всех пунктов меню) .db "Set Timer",0,0 ; доп.параметры для отрисовки (текст) form1: .dw SetTime_switch,form1 ; Ok: переключить ввод часов/минут .dw SetTime_save,mnu5 ; Esc: сохранить ввод и выйти обратно в меню .dw SetTime_minus,form1 ; Up: отнять единичку от значения .dw SetTime_plus,form1 ; Dn: прибавить .dw SetTime_draw ; отрисовка часов и минут ; доп.параметры функции отрисовки не нужны

Может показаться, что количество мелких функциюшек переваливает все разумные пределы. При бездумном подходе так и выйдет. Hа самом деле оказывается (на практике), что значительная часть функций невероятно похожи. И засчет правильной инициализации состояния (например, считать нужное значение из EEPROM в специально предназначенную ячейку), можно многие функции отрисовок и обработок унифицировать.

Инструмент невероятно гибок. Hапример, в вышеприведенном тексте я слукавил (для читаемости). Т.е. я это делаю не так. Если расписать функции, окажется, что прибавление/вычитание/отрисовка каждый раз вынуждены проверять состояние ввода часов/минут. А это долго и некрасиво. Тогда я создал еще одну форму, аналогичную описанной. Кнопка Ok ходит между формами туда-сюда. Функция SetTime_switch отсутствует (как и ячейка пямяти, хрянящая это состояние). А функции в каждой из форм устанавливают и рисуют уже конкретно то, что надо (т.е. действительно состоят из нескольких строк). Прибавкой 18 байт к данным (именно столько занимает описание состояния) я сэкономил порядка 50-80 байт кода (не говоря уж о читаемости сырца).

Sincerely yours, Old Greaser.

Reply to
Serge Bryxin

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.