Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.10.2021, 19:12   #21
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,529
По умолчанию

Для типа float нужно вводить плавающую арфметику (библиотека), а это:
а) раздувает код
б) замедляет работу в разы
в) совсем ни к чему.
Одно только объявление float не спасёт отца русской демократии.
Тhe right road - просчитать константы вручную и забить их в дефайны, мы вроде определились.

Последний раз редактировалось digitalis; 27.10.2021 в 19:18.
digitalis вне форума Ответить с цитированием
Старый 27.10.2021, 20:40   #22
devel2011
Пользователь
 
Регистрация: 24.10.2021
Сообщений: 17
По умолчанию

Жаль... Потому-что некоторые вычисленные значения констант дробные, а некоторые еще и со знаком минус. Объявить их через EQU как числа не получается.
Тем не менее, осталось три ошибки из примерно 600 (более 2100 строк кода). И один варнинг.
Варнинг: Value has been Truncated to 8 Bits
Код:
        ADD     A,#CORTIK
Это последствия кривой арифметики

Ошибки: Code-address expected
Код:
MOV     R2,#8
JB      ACC.0,RS1
Что тут не нравится компилятору - непонятно.
Сразу под ним:
Код:
SETB    INF        
AJMP    RS2        
RS1:    CLR     INF
INF определен в начале как INF REG P1.5 (ну или INF EQU P1.5), т.е. это 5 пин 1го порта МК. Ошибку вызывает строчка
Код:
RS1:    CLR     INF
Attempt to Define an Already Defined Label
Тут я нашел причину. В reg51.h, который инклудится в шапке уже определен битовый регистр RS1. Переименовал метку в RSS1, и ссылку из первой ошибки - и осталась последняя ошибка:
Код:
        MOV     P0,#FFH
Undefined symbol (PASS-2).
Здесь по сути идет установка портов P0 (P0.1-P0.7) в лог.1.
P0 - также определен в reg51.h. Сделал вот так:
Код:
MOV     P0,#11111111B
Равнозначна ли такая запись?

Последний раз редактировалось devel2011; 27.10.2021 в 20:45.
devel2011 вне форума Ответить с цитированием
Старый 27.10.2021, 20:43   #23
devel2011
Пользователь
 
Регистрация: 24.10.2021
Сообщений: 17
По умолчанию

Вопрос с константами пока открыт. От них просто так не уйти, т.к. в программе ведется подсчет времени, и другие счетчики (в т.ч. от внешних датчиков). И все это увязано на частоту кварца. Какой выход возможен, если вот так сделать нельзя:
Код:
CONST1 EQU -50.51
CONST2 EQU 0.171717
?
devel2011 вне форума Ответить с цитированием
Старый 28.10.2021, 14:02   #24
devel2011
Пользователь
 
Регистрация: 24.10.2021
Сообщений: 17
По умолчанию

Поскольку выяснилось, что EQU работает только с целыми числами, то решил пока пренебречь этим. Переделал выражения, чтобы не вываливались за диапазон 65535. Также пробовал просто указать значения. Вобщем, компилируется, HEX получен.
Эксперимента ради закинул FILE.A51 в компилятор Atmel C51ASM. Ему потребовался несколько иной inc, но это мелочь, подошел AT89S51.inc (в нем указано, что он подходит для AT89C51 тоже). На удивление, этому компилятору на числовые выражения справа от EQU фиолетово. Зато он вывалил 30 варнингов Expression greater than 8-bits.
Код:
        ANL     (7),#NOT AKT_B
AKT_B определен так:
Код:
AKT_B   EQU     10000000B
И ANL (7),#NOT AKT_B - это первая операция с ним в программе.
Во многих других варнингах также присутствует NOT, но не во всех.
По-прежнему непонятно выражение (7). Что оно означает (порт, восемь бит 11111111, или что-то иное)?
Но главное не в этом. Размер HEX-файла получился 8,2кБ. А у AT89C51 флеш всего 4кБ. Крайний адрес 0FFFH. У меня же получилось почти 2100H. Попробовал подгрузил HEX в miniPro - вижу блоки ... FF FF FF ... в середине прошивки. По идее такого быть не должно. Возможно, нужно как-то указать компилятору, как использовать память (пропустить FF, например).
В "железе" внешней EEPROM не предусмотрено, т.е. предполагается, что весь код должен уместиться во флеш 4кБ. Возможно, исходник A51 - не финальный вариант, и в отладке использовался EEPROM, но как это определить?
Если же это только мои домыслы насчет EEPROM, то как оптимизировать HEX, чтобы он влез в 4кБ? Фантастическая досталась мне прошивка =)
devel2011 вне форума Ответить с цитированием
Старый 29.10.2021, 09:38   #25
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,529
По умолчанию

Не проще ли, зная алгоритм, написать прогу с нуля? А то получится что-то костыльное с неопределённым количеством мин в виде необнаруженнвх багов. А если алгоритм неизвестен? Тогда имеем перевод произведения неизвестного жанра с южно-португальского на древне-зулусский посредством корейского разговорника.
digitalis вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка. Берём hex-код, шифруем hex-код, собираем всё в файл. Poltish Общие вопросы Delphi 2 21.08.2013 12:57
file->HEX HEX->BIN kakawkin Общие вопросы Delphi 1 25.04.2012 01:02
По HEX kompaky Общие вопросы по программированию, компьютерный форум 2 30.07.2011 19:12
Помогите с hex в с++ pavelstraut Помощь студентам 1 17.07.2009 23:29
C# и HEX megazz13 Помощь студентам 2 03.04.2009 00:32