Перейти к содержанию

Iar Assembler 78K0S, Как Правильно Задать Переменную В Saddr


EugenOS

Рекомендуемые сообщения

Доброго дня всем.

Имею непонятки с асмом IAR.

;------------------------------------------------------------------------------
load_const_32 macro   freg,c_hi,c_lo
 movw AX, #(c_lo)
 movw freg, AX
 movw AX, #(c_hi)
 movw freg+2, AX
    endm
;-----------------------------------------------------------------------------
    SADDR   EVEN  ; Задаем сегмент данных с короткой адресацией, при этом с привязкой к четным адресам (чтобы адресация слов работала верно)
PUBLIC eax
PUBLIC ebx
PUBLIC ecx
PUBLIC edx
m0:	 DS  4
m1:	 DS  4
eax:    DS  4
ebx:    DS  4
ecx:    DS  4
edx:    DS  4
;-----------------------------------------------------------------------------
	   RSEG CODE ; сегмент кода, релоцируемый
 load_const_32  eax, 4503H,114FH

 movw AX, #(0x114F) ; то же самое что делает макрос
 movw S:eax, AX ;  только я попробовал явно указать короткую адреацию
 movw AX, #(0x4503)
 movw S:eax+2, AX

так вот. ругается (варнингом) на все строки содержащие movw eax,AX ; mov eax, A и т.п. (т.е. где учавствует любая переменная из объявленных выше).

Warning[400]: Number out of range ....

post-42854-0-44432400-1399329147_thumb.jpg

На рисунке то что в list файле, сверху в рамку выделен развернувшийся макрос, снизу первый из двух варнингов после макроса. Как бы отличий не вижу...и не пойму чего ему надо.

Как я предполагаю, он хочет чтоб я ему указал что переменные находятся в saddr, но где ему этого не хватает в объявлении переменных, в написании операндов или может еще где?

Кто с иаром дружит - подскажите.

Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

В IAR и 78K0S мало понимаю, но складывается впечатление, что дело всё же в чётности.

В расшифровке варнинга есть подозрительная нечётная цифра 1

mov eax+2,ax - это команда, это понятно

Warning[400]: Number out of range - предупреждение о "выходе за пределы", это тоже понятно

movw \1+2,AX - расшифровка, но непонятно, почему 1+2 ? как будто адрес нечётный и начинается с 1.

---------------^

Если Вы сами не знаете, что это за 1, попробуйте переменную EBX подставить, если эта циферка заменится на 5, значит точно адреса нечётные. Второй способ проверить - подставить однобайтовую переменную перед всеми 32-ух битными и посмотреть, пропадут ли варнинги.

Изменено пользователем tcoder
Ссылка на комментарий
Поделиться на другие сайты

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

Я размещаю перенные типа "WORD"

в сегменте - SADDRP

пример

DSEG SADDRP

TESTDATA: DS 1 ; резервирую память 2байта для переменной "TESTDATA"

Среда программирования "PMplus"

Ссылка на комментарий
Поделиться на другие сайты

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Я такое пробовал уже. Добавляет еще ошибку " Error[428]: Address operand must be even"

По-идее сегмент релоцируемый и кроме того перед объявлением стоит привязка к четным адресам. Как я понял эти самые \1 ...\2 и т.п. это ссылки на параметры макроса...в реальности он туда пихает 0x10...0x13 для eax 0x14..0x17 для ebx и т.п.

проблема в том что адреса эти адреса как бы отданы уже под MUL, DIV и другие SFR

PM Plus не катит...во-первых под 7 не работает нормально, во-вторых софтового отладчика нет

P.S. я и пытаюсь переложить из под PM+. Кстати именно по этому не один параметр 32-х битной константы, а два двухбайтных. В отличии от IAR, PM+ не подддерживает 32-х битные интегеры в параметрах макроса. пришлось разбивать, когда пытался в ПМ+ работать. А тут еще не исправил на 32-х битные

В иаре, почему-то нет SADDRP

Изменено пользователем EugenOS
Ссылка на комментарий
Поделиться на другие сайты

Короче сделал проще. объявил переменные в главном модуле на С++:

long __saddr eax, ebx, ecx, edx;

а на асме объявил их как внешние.

    extern eax	
    extern ebx	
    extern ecx	
    extern edx	

Костыль конечно, но т.к. все равно главный модуль на сях, то и фиг с ним. Главное - работает.

Ссылка на комментарий
Поделиться на другие сайты

Проверил в IAR Вашу конструкцию - предупреждение тоже "Warning[400]: Number out of range".

Вспомнил, я пару лет назад пытался перевести свои проекты на ассемблере с "PM Plus" в "IAR" и загвоздка как раз была с переменными типа "WORD" c областью "SADDRP", вопрос не решив остался в "PM Plus".

Хотя эта среда программирования "PM Plus" порядком надоела из - за не предсказуемой реакцией на руские строчные буквы " э, ю, я ". C годами уже принаровился

На С++ конечно пойдёт, я программирую только на ASM , интересно было бы посмотреть на решение.

Ссылка на комментарий
Поделиться на другие сайты

Ну я как бы показал уже решение. На СИ:

long __saddr eax, ebx, ecx, edx;
extern "C"{
  void myFunc(void)
}
void main(void)
{
  eax = 12345;
  myFunc()
  // ну  и так далее....
}

На асме:

  SADDR ; на всякий  случай, может и не надо
    extern eax
    extern ebx  
    extern ecx  
    extern edx  

    RSEG  CODE
    PUBLIC myFunc
myFunc:
    movw AX, #eax
    mov HL, AX
    mov A,[HL]
; ну и так далее

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

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
  • Сообщения

    • Привет кто это еще читает. Знакомый купил в Москве по адекватной цене пару  B615D, дал на диагностику перед уверенной эксплуатацией. Одна сразу в защите, большой динамик спален, усилители на высокоомную нагрузку поют, буду позже разбираться. А вот вроде бы вполне работоспособная не сдюжила и 10 минут на хорошей мощности на плотном прогрессиве. Вылетели ключи в БП и драйвера на MMBTA56. Видно что был в ремонте, возможно ключи оказались палёнкой. Есть мысль впаять вместо FQPF13N50  чуток помощней по току 18N50-e. По параметру Qg аналогичные, а по  Сg будут потяжелей, 2350пф против 1800 у 13н50-х. 
    • Ну так теперь фигня вопрос. Проверить, что кнопки невозможно замкнуть одновременно, да определить, на какой ток транзисторы нужны. По характеристикам мотора или по максимально-допустимому току диодов D1-D4. Навскидку, моторчик низковольтный, диоды тоже. Транзисторы тогда на PBSS4350 можно заменить. Они на Али почти задаром продаются.
    • Сами же понимаете, что так не может быть. Или нет "сквозняка", или схема неправильно собрана, элементы не те, битые и пр., и схема защиты не работает. Проверьте сначала работу защёлки защиты при питании от 15 В, отпаяв R19 и подавая туда медленно увеличивающееся напряжение до 1,5 - 2 В (можно с потенциометра ом на 100-500). Добейтесь, чтобы работала. Порог срабатывания измерьте. Пересчитайте в ток через резистор 0,1 Ом. Соответствует ли "правильному"? Проверьте, что у этого резистора сопротивление действительно 0,1 Ом. Запаяйте 0,1 Ом обратно. Напишите, какая лампочка. А то мало ли какая, может она не от "сквозняка", а от броска тока заряда С18 С16 мигает. Транзисторы ключей проверьте. Впаяйте вместо первичной трансформатора резистор ом 150 - 300, чтобы ток с ключей в этот "эквивалент трансформатора" не больше 50-100 мА был. Посмотрите форму напряжения на выходе ключей, в точке соединения С16 и С18, на питании после лампочки. Ищите, где ляп. Умозрительно подсказать можно только по каким-то измеренным данным. Кроме вас никто их не добудет. В общем, как в анекдоте: - Молодой человек, ну делайте же уже хоть что-нибудь!
    • Ну так можно увеличить глубину ООС, тем самым понизив чувствительность и повысив линейность
    • Судя по этой картинке   в трухе передней панели под выступающие болты и шишки паек ЗК динамиков выковыряныфрезерованы выемки, иначе бы динамики так плотно не прилегали бы к ДВП.    А оно тебе надо? "Работает - не мешай"(с)/это уже аксиома, не требующая доказательств/ , пытаясь сделать лучше, чем сделано на заводе. Сanton-ят, т.е. поют, и лучше, чем есть, тебе не сделать. Ну перенесёшь ты динамики наружу, а что тебе это даст? Кроме того, что при попытке их продать(а продавать их когда-нибудь придётся, т.к. эта акустика бюджетного сегмента без потуг на высший класс Hi-Fi) , тебе придётся объяснять потенциальному покупателю причину, по которой какой-то умник заколхозил такую переделку с акустикой, ты ничего хорошего не получишь. Задуманная тобой переделка - это по сути возня ради возни. 
    • Малыш, чушь пока здесь мелешь только ты. Сидел бы лучше в своей оффтопной теме, лепил бы на своём 3D-пинтере куколок, и не лез бы в те темы, в которых ты - ноль. 
×
×
  • Создать...