Передача данных с Ассемблера в UL |
Ответить | Страница 123> |
Автор | |
Новичок Присоединился: 05 Март 2007 Категория: Kazakhstan Online Status: Offline Публикации: 14 |
Опубликовано: 05 Март 2007 09:54 |
Помогите, кто знает !!! Краткая предистория. У меня есть абсолютный поворотный шифратор, ECAN плата и ICOP 6050. Я (с трудом, конечно. А кому легко?) на Ассемблере написал прграммку, которая позволяет с шифраторов (через ECAN, а иначе ни как) получать данные. Осталось, вроде бы ничего сложного, передать ети данные в UL (версия 1.04.026) для далнейшей обработки. Но как раз в этом месте и запнулся. В UL создал сетевую переменную типа Float. Создал в своей проге процедуру открытого типа (Public) и переменную EXTRN DECSH1:Dword, в которой находится значение с шифратора. При Линковке в МАПе получаю следующее: Start Stop Length Name Class 00000H 006AAH 006ABH SYSTEM CODE Error: Undefined symbol DECSH1 in module OUTM0.ASM Вопрос:Как правильно нужно объявлять переменые в Ассеблере для UltroLgica? Покажите примеры, или хотя бы алгоритм. Спасибо за ранее!!! P.S.: С UL и Ассемблером познакомился в ноябре 2006. Так что орентируюсь, пока, слабо. |
|
Всё знать не возможно, но обовсем можно иметь понятие.
|
|
Действительный член Присоединился: 08 Март 2006 Категория: Russian Federation Online Status: Offline Публикации: 440 |
|
Надо лонимать, что ликуются разные модули между собой. Если так, то можно предложить такой порядок действий. С уважением, SAN |
|
Новичок Присоединился: 05 Март 2007 Категория: Kazakhstan Online Status: Offline Публикации: 14 |
|
В любом из .OBJ файлов хорошо просматриваются имена переменных (кстати, ни каких андебар ( _ underbar) не нашел. Может не туда смотрел). Самое пречальное в том, что в "текст" UL (если конечно его так можно назвать) вставляют объектный файл Ассемблера. После чего компилируется сам проект. Логично предположить, что текст программы на ассемблере должен быть "законченым", т.е. готовым к употреблению. В Ultrologice делается ссылка на объектной файл Ассма. После выбора файла можно выбрать "открытую" процедуру (UL сам предлогает список таких процедур содеражщихся в выбранном файле).Проблема в правильности написания самой программки, а точнее в объявление открытых процедур и общих переменных. Далее пример моей проги. Где я мог ошибиться? Dseg segment byte public 'data' При ассемблирование данного текста ни каких ошибок не видно. P.S. Данная программка получает данные с шифраторов и преобразует их в десятичный вид(4 знака). При небольшой модифекации данные можно получать непосредственно на монитор. |
|
Всё знать не возможно, но обовсем можно иметь понятие.
|
|
Действительный член Присоединился: 08 Март 2006 Категория: Russian Federation Online Status: Offline Публикации: 440 |
|
Дык, обождите... А где, по замыслу, должна существовать переменная DECSH1, в UL или в ассемблерном модуле ? Об'явление - EXTRN DECSH1:BYTE - это не содание самой переменной, а только упоминание что она где-то будет находиться в другом модуле. Если DECSH1 должна находиться в ASM-мовском модуле, то EXTRN - не надо, а присутствие этой переменной в сегменте типа PUBLIC автоматически делает её видимой из других модулей, в том числе и для проекта в UL, типа так : Dseg SEGMENT BYTE PUBLIC 'data' С уважением, SAN.
|
|
Новичок Присоединился: 05 Март 2007 Категория: Kazakhstan Online Status: Offline Публикации: 14 |
|
Серьёзно??! Ща попробую. По замыслу, вобщем то, переменая создается в Ассемблере, а её значение, в дальнейшем, обрабатывается в UL. |
|
Всё знать не возможно, но обовсем можно иметь понятие.
|
|
Профили участников
Послать частное письмо
Поиск публикаций участников
Посетить домашнюю страницу участника
Добавить в список приятелей
Действительный член Присоединился: 25 Апрель 2006 Категория: Russian Federation Online Status: Offline Публикации: 116 |
|
Во первых для компилятора TASM.EXE переменные в UL (16 разрядном) обьявляются так: extrn STORED_VAR:far ; переменная - STORED (Int) extrn KP_T9_1_VAR:far ; переменная - KP_T9_1 (Float) тоесть Вы в UL, в редакторе переменных, объявляете глобальные переменные с именем STORED и KP_T9_1. Все переменные в UL имеют имя - <имя переменной> & _VAR. После объявления "удаленных" переменных Вы можете из своего .obj получить доступ к этим переменным. Но помните, что вы получаете только адрес переменной и сами должны понимать, что переменная может иметь разную длину (Bool - 1 b, Int - 2 b, Float - 4 b). Пример шаблона подключаемого к UL модуля .obj : ; ========================== ; Объединить несколько сегментов в группу, ; ===========================================
mov word ptr ds:STORED_VAR, ax ; записываем значение ax в переменную STORED типа integer (глобальная) mov al, byte ptr ds:Auto_T9_1_VAR ; получаем значение переменной Auto_T9_1 в al
mov word ptr ds:Zad_T9_1_VAR+2, bx ; записываем значение bx в старшую часть переменной Zad_T9_1 типа Float (глобальная) mov ax, word ptr ds:Zad_T9_1_VAR ; получаем значение в ax младшей части переменной Zad_T9_1 типа Float (глобальная) mov bx, word ptr ds:Zad_T9_1_VAR+2 ; получаем значение в bx старшей части переменной Zad_T9_1 типа Float (глобальная) retn ; вернуться в основную программу ; --------------------------------------------------------------------------- _TEXT ends ; =============================== ; =============================== end ; конец программы =================== Компануете : C:\Tasm\BIN\TASM.EXE *.ASM В UL делаете: Новая программа => Создание новой программы (заполняете поля) Имя = <Имя программной вкладки> Примечание = <Коментарий> Синтаксис = EXT ( External Subroutine ) Статус = Start ( Auto Run ) ; если не будете запускать по call Потом на появившейся вкладке указывате путь к скомпановому .obj и в поле Public Name выбираете нужную Вам функцию из .obj. Всё!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
|
Vel
|
|
Профили участников
Послать частное письмо
Поиск публикаций участников
Посетить домашнюю страницу участника
Добавить в список приятелей
Действительный член Присоединился: 25 Апрель 2006 Категория: Russian Federation Online Status: Offline Публикации: 116 |
|
Да и еще, по возможности откажитесь от использования UL (версия 1.04.026), версия глюковатая. Используйте UL .20, UL .24 или UL .28 |
|
Vel
|
|
Новичок Присоединился: 05 Март 2007 Категория: Kazakhstan Online Status: Offline Публикации: 14 |
|
Почти получилось . Ошибка в МАПе перестала появлятся . Правда пришлось заменить DECSH1:BYTE на DECSH1 db ' $', а иначе ошибка и файл OBJ ( на Асме) не получался. Но после запуска программа зависает, хотя должна показать (выдать) следующее сообщение: Portions Copyright (c) 1995-2002 by CKA (UltraLogik Version 1.04) Project: (адрес где был скомпилирован проэкт) Из выше перечисленного можно сделать вывод: Проэк зависает не доходя до программки опроса шифраторов. В UL передача данных с одной переменной на другую делается вот так: Где SHIF программка на Асме.OBJ, DECSH1 - переменая из SHIF. А Dec сетевая переменная на UL. P.S. Программа пробная, поэтому такая простенькая. |
|
Всё знать не возможно, но обовсем можно иметь понятие.
|
|
Новичок Присоединился: 05 Март 2007 Категория: Kazakhstan Online Status: Offline Публикации: 14 |
|
Ага, это последний проект на этой версии. Потом на UL32 переходим. |
|
Всё знать не возможно, но обовсем можно иметь понятие.
|
|
Действительный член Присоединился: 08 Март 2006 Категория: Russian Federation Online Status: Offline Публикации: 440 |
|
Ну то-есть пока не линкуется ? _DATA SEGMENT BYTE PUBLIC 'DATA' USE16
_DATA SEGMENT BYTE PUBLIC 'DATA' USE16 И еще почему-то в MAP-е видны несколько сегментов данных. Желательно все переменные расположить в одном сегменте - меньше проблем. С уважением, SAN.
|
|
Ответить | Страница 123> |
Переход на форум | Права доступа на форуме Вы не можете публиковать новые темы в этом форуме Вы не можете отвечать на сообщения в этом форуме Вы не можете удалять Ваши сообщения на этом форуме Вы не можете редактировать Ваши сообщения на этом форуме Вы не можете создавать голосования на этом форуме Вы не можете выражать своё мнение в голосованиях на этом форуме |