Администрация форума не несёт ответственности за достоверность информации и оставляет за собой право редактировать или в особых случаях даже удалять посты без предупреждения. Спасибо за понимание.

Программирование ATMEL в BASCOM.

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Программирование ATMEL в BASCOM. » Вопросы - ответы » Вставить спецсимвол в строку


Вставить спецсимвол в строку

Сообщений 1 страница 10 из 10

1

Например Lcd "T=" ; temp ; Chr(&hDF)  -  печатаем температуру и значёк градуса )))
А как это всё записать в  строковую переменную???
Например, есть переменная Lcd_line_1    Как в неё записать и температуру и значёк градуса?
И как к этой-же строковой переменной применить шаблон типа Fusing (##.#) ???

0

2

Ну так же как и обычные переменные.
Создаем строковую переменную, пример:

Код:
Dim Txt As String * 10

Далее в коде с ней делаем все операции, пример:

Код:
Txt = "T=" + temp + Chr(&hDF)

Можно даже так, чуть короче:

Код:
Txt = "T=" + temp + "{223}"

Далее вывод на дисплей:

Код:
Lcd Txt


Всё - это есть в описании хелпа Баскома.

0

3

Fusing надо использовать на стадии, когда числовая переменная "temp" получается (возможно потребуется промежуточная строковая переменная).

0

4

Можно поподробнее с Fusing?
Каким образом форматирование можно применить к строковой переменной???
Для чего...
Пришел к такому выводу, что проще легче и красивее выводить информацию на дисплей в одной готовой процедуре, входным параметром которой является строка (1...4) или весь экран 20х4. Синхронизация от таймера 2 раза в секунду. Плюсы в том, что если информация на экране не меняется, значит её не нужно обновлять и исходный код гоООораздо компактнее. И нет так называемого "мусора" от предыдущей информации, которая не перезаписалась на экране и CLS не применишь, т.к. экран будет мерцать. Короче - мне понравилось так делать, всё чЁттке  :D

0

5

-NMi- написал(а):

Можно поподробнее с Fusing?

Fusing не форматирует строки. Она форматирует переменные типа SINGLE, а вот в результате получается переменная типа STRING.
Например:
Dim X As Single , S As String * 10
'Присвоим значение переменной X
X = 123.45678
'Попробуем её напечатать, но перед этим сконвертируем в строку
S = Str(X)
Print S               'Будет вот это, но нам надо другое 123.456779477
'Отформатируем
S = Fusing(X , "#.##")
Print S              'Получим строку, которой добивались. 123.46
Маски для FUSING можно глянуть в хелпе.

Отредактировано sva-don (2018-06-25 11:18:49)

0

6

Так...    пример такой...
A as string *10
B as string * 15
C as string * 20

Если сделать так: 
C = A + B
Получим "наезд" в переменных???
Механизм исключений походу в баскоме не предусмотрен...

0

7

-NMi- написал(а):

Получим "наезд" в переменных???

По сути да, причем непонятно что с чем.

-NMi- написал(а):

Механизм исключений походу в баскоме не предусмотрен...

Эта тема уже на офф форуме не раз обговаривались. 100% расчитывать на компилятор не стоит, хотя он и не плох, но если слабо понимать, что делаешь, то собравшийся код может преподносить неприятные сюрпризы.

0

8

Тогда вопрос будет задан так:
Хочу сделать Heap (куча на языке С) строковых переменных 20Х4 как раз на LCD.
Функцию прорисовки одной или нескольких или всех строк (битовое представление... &b_0000_1111 , например) с формированием строки через Fusing и прочее. Как отследить механизм "наезда" или переполнения строки из 20-ти символов (например) в баскоме? Есть какие-нибудь идеи???
/* для чего...  :confused:    НЕ ЛЕЗЕТ проект в чип, нужно что-то ужимать  :writing:  */

0

9

Если сделать размер строки больше? Или свободного ОЗУ мало?

-NMi- написал(а):

НЕ ЛЕЗЕТ проект в чип

Можно взять другой, например ATmega128. На али они около 1$ стоят.

0

10

-NMi- написал(а):

формированием строки через Fusing

На самом деле, надо понимать как работает баском.
Есть оператор "принт", который для вывода использует системный буфер "framesize". Если мы даже объявим переменные "стринг" и начнём через него выводить данные, то можем получить порчу данных в памяти с вытекающими последствиями.
И т.д...

hwstack - аппаратный стек, он необходим контроллеру чтобы записывать в него адреса того места, откуда прыгнула программа на подпрограмму или функцию. Если проще то так, камень выполняет программу и тут ему нужно уйти на выполнение какой-то подпрограммы (например прерывание), вот чтобы знать куда возвращаться после того как подпрограмма отработана, необходимо место чтобы сохранить этот адрес. При использовании в программе одного Gosub необходимо место в 2 байта.
swstack - программный стэк. Практически тоже самое, но хранит переменные (вернее их адреса) чтобы не потерять их после ухода на подпрограмму. Для хранения каждого адреса переменной тоже нужно резервировать по 2 байта.
framesize - это размер выделяемой памяти для преобразований строк, их форматирования, подготовку вывода на дисплей по команде LCD или PRINT/INPUT. В общем та область памяти куда буферизируются переменные для последующей обработки.

Изучать тут по большому счету нечего.
Числовые переменные - есть числовые, за рамки не выходят, могут только переполняться.
Следовательно "FUSING" на выходе делает текст, а вот текст может переполнять память. Следовательно смотрим его маску использования и применение к какому типу переменных - всё, макс. объём стринг известен.

0


Вы здесь » Программирование ATMEL в BASCOM. » Вопросы - ответы » Вставить спецсимвол в строку