реклама на сайте
подробности

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> надо в ассемблере в таблице организовать базу данных
Wild007
сообщение Sep 21 2007, 08:36
Сообщение #16


Местный
***

Группа: Свой
Сообщений: 226
Регистрация: 25-03-05
Из: Беларусь
Пользователь №: 3 672



Цитата(Maik-vs @ Sep 21 2007, 11:17) *
07.gif Это всё Вы проверяли, или И ТАК знаете?

Ну тогда напишите в программе
Код
.DB 0
.DB 4

и потом покажите варнинги компилятора и таблицу smile.gif smile.gif smile.gif

А в вашей программе проще и нагляднее написать
Код
.DB "Тестовая болванка"


--------------------
Ничто так не ограничивает полет мысли программиста, как компилятор
Go to the top of the page
 
+Quote Post
Maik-vs
сообщение Sep 21 2007, 09:22
Сообщение #17


Местный
***

Группа: Участник
Сообщений: 246
Регистрация: 4-12-06
Пользователь №: 23 101



Цитата(Wild007 @ Sep 21 2007, 12:36) *
Ну тогда напишите в программе
Код
.DB 0
.DB 4

и потом покажите варнинги компилятора и таблицу smile.gif smile.gif smile.gif

Да! так ставит только по чётным адресам. А DB 0,1 DB2,3 писать не судьба?

Цитата
А в вашей программе проще и нагляднее написать
Код
.DB "Тестовая болванка"

А вот это у меня раньше почему-то не работало smile.gif
Go to the top of the page
 
+Quote Post
Yuriy_AVR
сообщение Sep 21 2007, 09:58
Сообщение #18


Участник
*

Группа: Участник
Сообщений: 38
Регистрация: 12-01-07
Из: Крым
Пользователь №: 24 378



Цитата(Maik-vs @ Sep 21 2007, 12:17) *
07.gif Это всё Вы проверяли, или И ТАК знаете?
[attachment=13875:attachment]
чтение IDent32:
ldi Yh,high(IDent32)
ldi Yl,low(IDent32)
shl Yl
ror Yh

cyc: lmp r16,Y+
st X+,r16
CPI16 X,C_MsgTable
brlo cyc

(где CPI16 16-разрядное сравнение.)

Объясните, почему у меня это работает?


Так а что здесь может неработать ? Разве что lmp r16,Y+ нет такой команды у AVRов . Выборка из памяти программ производится только через регистровую пару Z ( см. описание системы команд ).
Всё в рамках того , что я и писал .
shl Yl я так понимаю описка , должно быть по идее lsl . Гораздо проще записать так
ldi Yh,high(IDent32 х2)
ldi Yl,low(IDent32 х2)
и нет необходимости в лишних 2 строчках ( lsl Yl и ror Yh )
Так и что вы делаете ? Вы загружаете указатель чётным значением адреса на базу данных , а затем просто инкрементируете указатель , и естественно он будет последовательно выбирать из таблицы правильные значения ( как чётные так и нечётные ) . Но речь то о другом - у вас есть указатель на базу данных и вам необходимо выбрать произвольное значение по этой базе данных ( т.е смещение от начала базы данных ). Ну и как вы будете делать ? например так ? :

ldi Yh,high(IDent32)
ldi Yl,low(IDent32)
shl Yl
ror Yh
add Yl,temp1
clr temp1
adc yh,temp1
lpm temp1,Y
где temp1 - произвольное смещение по таблице
И по вашему вы будете правильно получать значения из базы данных ? Тогда попробуйте , убедитесь в своей неправоте .






Цитата(Wild007 @ Sep 21 2007, 12:36) *
Ну тогда напишите в программе
Код
.DB 0
.DB 4

и потом покажите варнинги компилятора и таблицу smile.gif smile.gif smile.gif

А в вашей программе проще и нагляднее написать
Код
.DB "Тестовая болванка"

Простите , непонял . . .

Цитата(Maik-vs @ Sep 21 2007, 13:22) *
Да! так ставит только по чётным адресам. А DB 0,1 DB2,3 писать не судьба?
А вот это у меня раньше почему-то не работало smile.gif


DB 0,1 DB2,3 писать не судьба?
Это как это ? Извените , сразу немогу ощутить глубину мысли . . .

Цитата(Yuriy_AVR @ Sep 21 2007, 13:41) *
Так а что здесь может неработать ? Разве что lmp r16,Y+ нет такой команды у AVRов . Выборка из памяти программ производится только через регистровую пару Z ( см. описание системы команд ).
Всё в рамках того , что я и писал .
shl Yl я так понимаю описка , должно быть по идее lsl . Гораздо проще записать так
ldi Yh,high(IDent32 х2)
ldi Yl,low(IDent32 х2)
и нет необходимости в лишних 2 строчках ( lsl Yl и ror Yh )
Так и что вы делаете ? Вы загружаете указатель чётным значением адреса на базу данных , а затем просто инкрементируете указатель , и естественно он будет последовательно выбирать из таблицы правильные значения ( как чётные так и нечётные ) . Но речь то о другом - у вас есть указатель на базу данных и вам необходимо выбрать произвольное значение по этой базе данных ( т.е смещение от начала базы данных ). Ну и как вы будете делать ? например так ? :

ldi Yh,high(IDent32)
ldi Yl,low(IDent32)
shl Yl
ror Yh
add Yl,temp1
clr temp1
adc yh,temp1
lpm temp1,Y
где temp1 - произвольное смещение по таблице
И по вашему вы будете правильно получать значения из базы данных ? Тогда попробуйте , убедитесь в своей неправоте .
Простите , непонял . . .
DB 0,1 DB2,3 писать не судьба?
Это как это ? Извените , сразу немогу ощутить глубину мысли . . .


Да , в приведённом мной тексте конечно же необходимо заменить Y на Z


Продолжаем прикол .
Так вот , после того , как база данных была записана в необходимом для меня виде :
.DB (Seg_On<<D7)+(Seg_On<<D6)+(Seg_On<<D5)+(Seg_On<<D4)+(Seg_On<<D3)+(Seg_Off<<D2)+(Seg_On<<D1)+(Seg_Off<<D0),\
(Seg_Off<<D7)+(Seg_Off<<D6)+(Seg_Off<<D5)+(Seg_Off<<D4)+(Seg_On<<D3)+(Seg_Off<<D2)+(Seg_On<<D1)+(Seg_Off<<D0)
.DB (Seg_On<<D7)+(Seg_On<<D6)+(Seg_Off<<D5)+(Seg_On<<D4)+(Seg_On<<D3)+(Seg_On<<D2)+(Seg_Off<<D1)+(Seg_Off<<D0),\
(Seg_On<<D7)+(Seg_Off<<D6)+(Seg_Off<<D5)+(Seg_On<<D4)+(Seg_On<<D3)+(Seg_On<<D2)+(Seg_On<<D1)+(Seg_Off<<D0)
.DB (Seg_Off<<D7)+(Seg_Off<<D6)+(Seg_On<<D5)+(Seg_Off<<D4)+(Seg_On<<D3)+(Seg_On<<D2)+(Seg_On<<D1)+(Seg_Off<<D0),\
(Seg_On<<D7)+(Seg_Off<<D6)+(Seg_On<<D5)+(Seg_On<<D4)+(Seg_Off<<D3)+(Seg_On<<D2)+(Seg_On<<D1)+(Seg_Off<<D0)
.DB (Seg_On<<D7)+(Seg_On<<D6)+(Seg_On<<D5)+(Seg_On<<D4)+(Seg_Off<<D3)+(Seg_On<<D2)+(Seg_On<<D1)+(Seg_Off<<D0),\
(Seg_Off<<D7)+(Seg_Off<<D6)+(Seg_Off<<D5)+(Seg_On<<D4)+(Seg_On<<D3)+(Seg_Off<<D2)+(Seg_On<<D1)+(Seg_Off<<D0)
.DB (Seg_On<<D7)+(Seg_On<<D6)+(Seg_On<<D5)+(Seg_On<<D4)+(Seg_On<<D3)+(Seg_On<<D2)+(Seg_On<<D1)+(Seg_Off<<D0),\
(Seg_On<<D7)+(Seg_Off<<D6)+(Seg_On<<D5)+(Seg_On<<D4)+(Seg_On<<D3)+(Seg_On<<D2)+(Seg_On<<D1)+(Seg_Off<<D0)
.DB (Seg_Off<<D7)+(Seg_Off<<D6)+(Seg_Off<<D5)+(Seg_Off<<D4)+(Seg_Off<<D3)+(Seg_Off<<D2)+(Seg_Off<<D1)+(Seg_Off<<D0),\
0
и откомпиллирована , а также успешно проверена работоспособность программы , затем в конце каждой строчки были добавлены комментарии ( // ля ля ля ) .

.DB (Seg_On<<D7)+(Seg_On<<D6)+(Seg_On<<D5)+(Seg_On<<D4)+(Seg_On<<D3)+(Seg_Off<<D2)+(Seg_On<<D1)+(Seg_Off<<D0),\ //
(Seg_Off<<D7)+(Seg_Off<<D6)+(Seg_Off<<D5)+(Seg_Off<<D4)+(Seg_On<<D3)+(Seg_Off<<D2)+(Seg_On<<D1)+(Seg_Off<<D0) //
.DB (Seg_On<<D7)+(Seg_On<<D6)+(Seg_Off<<D5)+(Seg_On<<D4)+(Seg_On<<D3)+(Seg_On<<D2)+(Seg_Off<<D1)+(Seg_Off<<D0),\ //
(Seg_On<<D7)+(Seg_Off<<D6)+(Seg_Off<<D5)+(Seg_On<<D4)+(Seg_On<<D3)+(Seg_On<<D2)+(Seg_On<<D1)+(Seg_Off<<D0) //
.DB (Seg_Off<<D7)+(Seg_Off<<D6)+(Seg_On<<D5)+(Seg_Off<<D4)+(Seg_On<<D3)+(Seg_On<<D2)+(Seg_On<<D1)+(Seg_Off<<D0),\ //
(Seg_On<<D7)+(Seg_Off<<D6)+(Seg_On<<D5)+(Seg_On<<D4)+(Seg_Off<<D3)+(Seg_On<<D2)+(Seg_On<<D1)+(Seg_Off<<D0) //
.DB (Seg_On<<D7)+(Seg_On<<D6)+(Seg_On<<D5)+(Seg_On<<D4)+(Seg_Off<<D3)+(Seg_On<<D2)+(Seg_On<<D1)+(Seg_Off<<D0),\ //
(Seg_Off<<D7)+(Seg_Off<<D6)+(Seg_Off<<D5)+(Seg_On<<D4)+(Seg_On<<D3)+(Seg_Off<<D2)+(Seg_On<<D1)+(Seg_Off<<D0) //
.DB (Seg_On<<D7)+(Seg_On<<D6)+(Seg_On<<D5)+(Seg_On<<D4)+(Seg_On<<D3)+(Seg_On<<D2)+(Seg_On<<D1)+(Seg_Off<<D0),\ //
(Seg_On<<D7)+(Seg_Off<<D6)+(Seg_On<<D5)+(Seg_On<<D4)+(Seg_On<<D3)+(Seg_On<<D2)+(Seg_On<<D1)+(Seg_Off<<D0) //
.DB (Seg_Off<<D7)+(Seg_Off<<D6)+(Seg_Off<<D5)+(Seg_Off<<D4)+(Seg_Off<<D3)+(Seg_Off<<D2)+(Seg_Off<<D1)+(Seg_Off<<D0),\ //
0

И . . . опять всё плохо . Опять компиллятор находит ошибку во второй строчке . Но что самое удивительное - повторное удаление комментариев уже не приводит к положительным результатам . Кто не верит может попробовать . Может у меня уже глаза "замылились " , уже сам себе не верю . Чушь какая- то . sad.gif sad.gif wacko.gif
Go to the top of the page
 
+Quote Post
Wild007
сообщение Sep 21 2007, 10:04
Сообщение #19


Местный
***

Группа: Свой
Сообщений: 226
Регистрация: 25-03-05
Из: Беларусь
Пользователь №: 3 672



Цитата(Yuriy_AVR @ Sep 21 2007, 12:43) *
Так а что здесь может неработать ? Разве что lmp r16,Y+ нет такой команды у AVRов .

В новых АВР есть команда LPM Rx,Y+ (cм. например tn2313def.inc)

Цитата
Простите , непонял . . .


Это относилось к проге Maik-vs

Код
.DB 9
.DB 4


полностью соответствует совету =GM=

Код
.DB (On<<D7)+(On<<D6)+(On<<D5)+(On<<D4)+(On<<D3)+(Of<<D2)+(On<<D1)+(Of<<D0);0
.DB (Of<<D7)+(Of<<D6)+(Of<<D5)+(Of<<D4)+(On<<D3)+(Of<<D2)+(On<<D1)+(Of<<D0);1


Цитата
DB 0,1 DB2,3 писать не судьба?
Это как это ? Извените , сразу немогу ощутить глубину мысли . . .


Это "совет" писать четное количество значений в строке smile.gif smile.gif
Хотя мы это и сами знаем...


--------------------
Ничто так не ограничивает полет мысли программиста, как компилятор
Go to the top of the page
 
+Quote Post
Yuriy_AVR
сообщение Sep 21 2007, 11:49
Сообщение #20


Участник
*

Группа: Участник
Сообщений: 38
Регистрация: 12-01-07
Из: Крым
Пользователь №: 24 378



Цитата(Wild007 @ Sep 21 2007, 14:04) *
В новых АВР есть команда LPM Rx,Y+ (cм. например tn2313def.inc)
Это относилось к проге Maik-vs

Код
.DB 9
.DB 4


полностью соответствует совету =GM=

Код
.DB (On<<D7)+(On<<D6)+(On<<D5)+(On<<D4)+(On<<D3)+(Of<<D2)+(On<<D1)+(Of<<D0);0
.DB (Of<<D7)+(Of<<D6)+(Of<<D5)+(Of<<D4)+(On<<D3)+(Of<<D2)+(On<<D1)+(Of<<D0);1




Это "совет" писать четное количество значений в строке smile.gif smile.gif
Хотя мы это и сами знаем...

Дело в том , что в моей программе On и Seg_On суть разные вещи, и в данном случае принимают противоположные значения . Такая запись просто сокращает несколько длину строки , но не меняет принципиально подход . Оно обязано работать в таком виде :
.DB (Seg_On<<D7)+(Seg_On<<D6)+(Seg_On<<D5)+(Seg_On<<D4)+(Seg_On<<D3)+(Seg_Off<<D2)+(Seg_On<<D1)+(Seg_Off<<D0),\
(Seg_Off<<D7)+(Seg_Off<<D6)+(Seg_Off<<D5)+(Seg_Off<<D4)+(Seg_On<<D3)+(Seg_Off<<D2)+(Seg_On<<D1)+(Seg_Off<<D0)
и иногда работает !!!
и видимо какая то проблема с компилятором существует что после обнаружения Си-шного комментария он дуреет.
Видимо самый "железный" выход- сделать переопределение переменной ( как и посоветовал Wild007) . И всё работает естественно на УРА !
Go to the top of the page
 
+Quote Post
Wild007
сообщение Sep 21 2007, 12:17
Сообщение #21


Местный
***

Группа: Свой
Сообщений: 226
Регистрация: 25-03-05
Из: Беларусь
Пользователь №: 3 672



Цитата(Yuriy_AVR @ Sep 21 2007, 14:49) *
Оно обязано работать в таком виде :
.DB (Seg_On<<D7)+(Seg_On<<D6)+(Seg_On<<D5)+(Seg_On<<D4)+(Seg_On<<D3)+(Seg_Off<<D2)+(Seg_On<<D1)+(Seg_Off<<D0),\
(Seg_Off<<D7)+(Seg_Off<<D6)+(Seg_Off<<D5)+(Seg_Off<<D4)+(Seg_On<<D3)+(Seg_Off<<D2)+(Seg_On<<D1)+(Seg_Off<<D0)
и иногда работает !!!
и видимо какая то проблема с компилятором существует что после обнаружения Си-шного комментария он дуреет.


Он "дуреет" не только от Си-шного комментария, но и от ";" после "\"


--------------------
Ничто так не ограничивает полет мысли программиста, как компилятор
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Sep 21 2007, 16:46
Сообщение #22


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



А вот лично я такие таблицы со сложными зависимостями пишу на каком-нибудь
третьем языке. В смысле - пишу отдельную программу, которая выводит таблицу
по правилам асма. Там уже можно делать, что хочешь. Главное - нет зависимости
исходника от способа формирования данных. Ну и, конечно -
в AVRASM2 СТОКА ГЛЮКОВ!!!, что думаешь, что они только этим и занимаются,
как бы нам крышу сбить...
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Sep 21 2007, 17:04
Сообщение #23


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Цитата(_Pasha @ Sep 21 2007, 19:46) *
А вот лично я такие таблицы со сложными зависимостями пишу на каком-нибудь
третьем языке. В смысле - пишу отдельную программу, которая выводит таблицу
по правилам асма.


Я тоже. Часто вывожу не АСМом, а в BIN виде. И дальше использую прогу которая преобразует в вид ASM или C.
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Sep 21 2007, 17:24
Сообщение #24


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



...Не заметил.
Это ж Вы (автор темы) намекаете на организацию вывода символов и строк на
семисегментный индикатор!?
Тогда рекомендую :[attachment=13897:attachment]
На все вопросы отвечу. Со временем smile.gif
Go to the top of the page
 
+Quote Post
ReAl
сообщение Sep 21 2007, 19:17
Сообщение #25


Нечётный пользователь.
******

Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417



Цитата(Yuriy_AVR @ Sep 21 2007, 11:58) *
Но что самое удивительное - повторное удаление комментариев уже не приводит к положительным результатам .
Между символом '\' и переводом строки не должно быть никаких других символов, иначе бэкслэш не маскирует перевод строки (стоит-то не перед ним!).
Видать, после удаления комментариев после '\' остались пробелы, вот и все проблемы.


--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post
Yuriy_AVR
сообщение Sep 22 2007, 13:00
Сообщение #26


Участник
*

Группа: Участник
Сообщений: 38
Регистрация: 12-01-07
Из: Крым
Пользователь №: 24 378



Цитата(_Pasha @ Sep 21 2007, 21:24) *
...Не заметил.
Это ж Вы (автор темы) намекаете на организацию вывода символов и строк на
семисегментный индикатор!?
Тогда рекомендую :[attachment=13897:attachment]
На все вопросы отвечу. Со временем smile.gif

Большое спасибо за помощь. Приведённый вами кусок программы является перепевкой предложения Wild007 , и по факту является простым переопределнием переменной ( сам немогу понять как я так протормозил что недодумался , ну быввает что тормоза включаются).

Цитата(ReAl @ Sep 21 2007, 23:17) *
Между символом '\' и переводом строки не должно быть никаких других символов, иначе бэкслэш не маскирует перевод строки (стоит-то не перед ним!).
Видать, после удаления комментариев после '\' остались пробелы, вот и все проблемы.

Большое спасибо что откликнулись на мою просьбу ( читай на мои "тормоза") .
Когда я после положительного результата опять получил отрицательный, то пришёл к тому же выводу что и вы . Но удалять пробелы уже не стал - просто переопределил переменную и стал писать дальше .
Go to the top of the page
 
+Quote Post
CDT
сообщение Sep 24 2007, 10:08
Сообщение #27


Местный
***

Группа: Свой
Сообщений: 303
Регистрация: 3-03-05
Пользователь №: 3 044



Цитата(Yuriy_AVR @ Sep 21 2007, 12:58) *
DB 0,1 DB2,3 писать не судьба?

Судьба, если читал:
Код
AVRASM2 allows multiple instructions and directives per line, but its use is not recommended. It is needed to support expansion of multiline preprocessor macros.

и понимать, что выше приведенная запись приведет к сообщению "Unknown instruction or macro", а в правильном написании абсолютно эквивалентна
Код
DB 0,1
DB 2,3


--------------------
Опыт - чудесная вещь: легко использовать, можно продать, трудно пропить.
Go to the top of the page
 
+Quote Post

2 страниц V  < 1 2
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 15th July 2025 - 13:48
Рейтинг@Mail.ru


Страница сгенерированна за 0.01507 секунд с 7
ELECTRONIX ©2004-2016