Easyelectronics.ru

Электроника для всех
Текущее время: 14 апр 2021, 15:17

Часовой пояс: UTC + 5 часов



JLCPCB – Прототипы печатных плат за $2/5шт. два слоя. $5/5шт. четыре слоя
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ Сообщений: 23 ] 
Автор Сообщение
 Заголовок сообщения: Keil 8051 как запихнуть *.a51 в *.a51 и не получить WARNING
СообщениеДобавлено: 30 май 2015, 01:37 
Заглядывает иногда

Зарегистрирован: 06 мар 2013, 23:44
Сообщения: 199
Здравствуйте. Начал самостоятельное изучение кейла и MSC51. Но вот разжеванной инфы по A51 очень мало.


Show Такая проблема, написал файл инициализации init.a51

Хочу запихнуть его инклудом в main.a51, там кроме инклуда нет вообще ничего.

Получаю *** WARNING L5: CODE SPACE MEMORY OVERLAP 00h to 33h

Если скопировать код в хедер и вставить его, то ворнинга не будет.

Научите пожалуйста директивам A51, что бы можно нормально вставлять и выставлять код из файла в файл.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Keil 8051 как запихнуть *.a51 в *.a51 и не получить WARNING
СообщениеДобавлено: 30 май 2015, 10:55 
Старожил
Аватара пользователя

Зарегистрирован: 28 дек 2011, 11:24
Сообщения: 4391
Откуда: г. Липецк
a51 - двухпроходный оптимизирующий ассемблер для написания сегментированных программ. Если вы хотите разбить программу на логические блоки, каждый блок должен быть оформлен своим сегментом. Первый програмный сегмент будет тот, в котором строка CSEG AT 0, остальные препроцессор разместит сам. Поэтому оператор ORG должен использоваться только для таблицы прерываний. Инклюды в а51 практически не используются, только для таблиц и макросов, код должен быть в своем сегменте (сегментах). Эти файлы просто подключаются в проект. О написании программ под а51 я уже писал в этой ветке.
Для вас примерно так:
Show InitSection

Главный цикл в другом файле:
Show MainSection

Но так никто не делает, где уверенность что компилятор не вклинит между InitSection и MainSection например ТаблеSection?
Поэтому и инициализация и главный цикл должны располагаться в одном файле. Другое дело, что главный цикл может состоять только из вызовов подпрограмм, а вот они уже могут располагаться в других файлах (секциях).
Имена секциям даются для быстрого поиска ошибок, компилятор выведет его в строке ошибки.
Среда Keil уже содержит кучу примеров, в том числе и разной инициализации - Init.a51, Init_mx.a51, Init_tny.a51, файлы StartXXX.a51 в папке С51\Lib.
Чтение и разбор исходников - лучший учебник, да и хелп (англоязычный) в Keil отличный.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Keil 8051 как запихнуть *.a51 в *.a51 и не получить WARNING
СообщениеДобавлено: 30 май 2015, 16:05 
Заглядывает иногда

Зарегистрирован: 06 мар 2013, 23:44
Сообщения: 199
Здравствуйте. Спасибо за ответ.

Но не могу понять:
STACK SEGMENT IDATA
RSEG STACK
DS STACK_START
Объявляется сегмент в ОЗУ, и там выделяется место под переменную размером с адрес начала стека?
MOV SP, #STACK-1 ; тут от сегмента в ОЗУ уже что то отнимают, да еще как от куска кода!
Даже если предположить, что так хитро инициализируется стек, почему -1?

RSEG INIT ;
USING 0 ;
Что вот это такое? Переключение банка, но оно до метки Start, PC туда не попадет никогда.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Keil 8051 как запихнуть *.a51 в *.a51 и не получить WARNING
СообщениеДобавлено: 30 май 2015, 16:45 
Старожил
Аватара пользователя

Зарегистрирован: 28 дек 2011, 11:24
Сообщения: 4391
Откуда: г. Липецк
ОЗУ у i51 не является непрерывной областью одинаковой памяти. Оно разбито на сегменты, непосредственно адресуемый DATA, косвенно адресуемый IDATA, внешняя RAM XDATA, хотя часть ее часто находится на чипе и т.д.
Стек всегда размещается в сегменте IDATA, от основной памяти он ничего не отнимает. То что вы назвали STACK_START - это на самом деле его зарезервированный размер. #STACK-1 - потому, что стек у i51 расширяется вверх, при обращении сначала происходит инкремент (переход на следующий адрес), затем запись.
RSEG INIT - это регистрация (место с которого начинается) сегмента данных INIT.
USING 0 - предупреждение компилятору, что пока программа использует только банк 0. Банки 1..3 он может использовать как обычное ОЗУ. На первом проходе компилятор подсчитывает все USING и соответственно распределяет память.
Изображение


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Keil 8051 как запихнуть *.a51 в *.a51 и не получить WARNING
СообщениеДобавлено: 30 май 2015, 17:29 
Заглядывает иногда

Зарегистрирован: 06 мар 2013, 23:44
Сообщения: 199
anakost писал(а):
ОЗУ у i51 не является непрерывной областью одинаковой памяти. Оно разбито на сегменты, непосредственно адресуемый DATA, косвенно адресуемый IDATA, внешняя RAM XDATA, хотя часть ее часто находится на чипе и т.д.
Стек всегда размещается в сегменте IDATA, от основной памяти он ничего не отнимает. То что вы назвали STACK_START - это на самом деле его зарезервированный размер.


По USING прошу извинить, моя вина не дочитал.

А вот про ОЗУ я совсем запутался. Но ведь DATA(РОН+20-7F) по сути является частью IDATA(РОН+20-7F+РСН)

В РСН находится только SP(указатель стека)
Сам стек должен писаться куда нибудь в память с возможностью прямой адресацией 00-7F

Или я что то не понимаю...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Keil 8051 как запихнуть *.a51 в *.a51 и не получить WARNING
СообщениеДобавлено: 30 май 2015, 17:57 
Старожил
Аватара пользователя

Зарегистрирован: 28 дек 2011, 11:24
Сообщения: 4391
Откуда: г. Липецк
Все вы правильно понимаете. Непосредственно адресуемой RAM у предка i51 было всего 128 байт. Тогда там размещался и стек в том числе. Но уже у i52 стало 256 байт RAM. И как их теперь адресовать семью битами? Поэтому вторую страницу в 128 байт с косвенной адресацией обозвали IDATA, и стек теперь всегда там. Но и теперь выпускаются контроллеры с 128 байт RAM. Например AT89C2051. Поэтому указывая IDE конкретный тип контроллера, вы не только подключаете описания регистров, вы и грубо указываете как интерпретировать адреса памяти. Более точно можно задать в настройках проекта.
Прямая адресация для работы со стеком стандартными средствами не предусмотрена архитектурой, только косвенно через SP.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Keil 8051 как запихнуть *.a51 в *.a51 и не получить WARNING
СообщениеДобавлено: 30 май 2015, 18:15 
Заглядывает иногда

Зарегистрирован: 07 фев 2012, 19:31
Сообщения: 118
Регистр-указатель стека SP в 805Х -- восьмибитный. Он может адресовать любую область внутренней памяти данных. В отличие от микропроцессора КР580ВМ80, у микро-ЭВМ семейства 805Х стек "растет вверх", т.е. перед выполнением команды PUSH или CALL содержимое SP инкрементируется, после чего производится запись информации в стек. Соответственно при извлечении информации из стека регистр SP декрементируется после извлечения информации. В процессе инициализации микро-ЭВМ после сигнала сброса или при включении питающего напряжения в SP заносится код 07h (8-1)!!!. Это означает, что первый элемент стека будет располагаться в ячейке памяти с адресом 08h... Учите матчасть, а то бьют так больно...

_________________
Прерывание на хальте, осложненное ПДП циклом...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Keil 8051 как запихнуть *.a51 в *.a51 и не получить WARNING
СообщениеДобавлено: 30 май 2015, 18:51 
Старожил
Аватара пользователя

Зарегистрирован: 28 дек 2011, 11:24
Сообщения: 4391
Откуда: г. Липецк
eugene_e_n писал(а):
...Это означает, что первый элемент стека будет располагаться в ячейке памяти с адресом 08h...

Поправка, после строк
Цитата:
STACK SEGMENT IDATA
RSEG STACK
DS 0х07

стек будет в ячейке 0х80 и зарезервирован на 8 байт... Конечно если физически эта память доступна для контроллера (описано в подключаемом файле). Кстати, для Keil это не *.ini, а *. xml, и подключается автоматом при выборе опций проекта.


Последний раз редактировалось anakost 30 май 2015, 19:06, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Keil 8051 как запихнуть *.a51 в *.a51 и не получить WARNING
СообщениеДобавлено: 30 май 2015, 18:58 
Заглядывает иногда

Зарегистрирован: 07 фев 2012, 19:31
Сообщения: 118
Это был ответ на "почему -1?".

Я давал информацию не о конкретной величине указателя стека, а о методике назначения исходного значения указателя стека...
При данном вами раскладе памяти исходно в указатель стека должна быть занесена величина 80h-1...

_________________
Прерывание на хальте, осложненное ПДП циклом...


Последний раз редактировалось eugene_e_n 30 май 2015, 19:00, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Keil 8051 как запихнуть *.a51 в *.a51 и не получить WARNING
СообщениеДобавлено: 30 май 2015, 19:00 
Заглядывает иногда

Зарегистрирован: 06 мар 2013, 23:44
Сообщения: 199
eugene_e_n писал(а):
перед выполнением команды PUSH или CALL содержимое SP инкрементируется, после чего производится запись информации в стек.


Спасибо. Минус еще вопрос, почему то думал, что там постинкремент.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Keil 8051 как запихнуть *.a51 в *.a51 и не получить WARNING
СообщениеДобавлено: 30 май 2015, 19:24 
Заглядывает иногда

Зарегистрирован: 06 мар 2013, 23:44
Сообщения: 199
anakost писал(а):
Все вы правильно понимаете. Непосредственно адресуемой RAM у предка i51 было всего 128 байт. Тогда там размещался и стек в том числе. Но уже у i52 стало 256 байт RAM. И как их теперь адресовать семью битами? Поэтому вторую страницу в 128 байт с косвенной адресацией обозвали IDATA, и стек теперь всегда там. Но и теперь выпускаются контроллеры с 128 байт RAM. Например AT89C2051. Поэтому указывая IDE конкретный тип контроллера, вы не только подключаете описания регистров, вы и грубо указываете как интерпретировать адреса памяти. Более точно можно задать в настройках проекта.
Прямая адресация для работы со стеком стандартными средствами не предусмотрена архитектурой, только косвенно через SP.


Такс, а я как раз решил для начала взять этот самый C2051 и во всем отталкиваюсь от него.

Те как я понял в контроллерах 8052, 2 параллельных ОЗУ?

1я Стандартная от 8051 128 байт с прямой и косвенной адресацией + 128 РСН.
2я IDATA 128 байт с исключительно косвенной адресацией через SP

IDATA не конфликтует с SFR потому, что физически не начинается с адреса 80h? Или? Все в голове каша.

Все ушел читать даташиты на 8052 =\


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Keil 8051 как запихнуть *.a51 в *.a51 и не получить WARNING
СообщениеДобавлено: 30 май 2015, 22:20 
Заглядывает иногда

Зарегистрирован: 06 мар 2013, 23:44
Сообщения: 199
Такс вычитал http://what-when-how.com/8051-microcont ... m-in-8052/

Значит как я и понял, на 8052 имеем 3 физически разные куска ОЗУ:

1. DATA (РОН + адреса 20-7F) адресуется и прямо и косвенно.
2. SFR (80-FF) обращение к ним происходит только при прямой адресации
3. IDATA (адрес такой же 80-FF) но обращение к ним может происходить только через косвенную адресацию, а именно через R0\R1 и SP

Хорошо, многое стало яснее.

Но зачем нужен и что делает этот код, я стал понимать еще меньше =)
STACK SEGMENT IDATA
RSEG STACK
DS 0х07

Получается мы резервируем сегмент в ОЗУ с меткой STACK и выделяем 7 байт(почему не 8?) с 80h по 86h абсолютному адресу ОЗУ или с 00h по 06h относительно памяти IDATA.
Но зачем это делать?

SP мы инициализируем после строкой MOV SP, #STACK-1

Вот тут я вообще теряюсь. # — мы загружаем в SP значение сегмента STACK. Но блин, значение сегмента STACK должно быть 00 ибо мы только зарезервировали память, но не фига туда не закидывали, так же значение сегмента STACK имеет размер в 7 байт, целиком его попросту нельзя использовать в инструкции MOV.

ПС в своих размышлениях опираюсь на это:

〚label:〛 DS expression
The DS statement reserves the specified number of bytes in the current memory space. label is a symbol that is assigned the current memory address. expression is the number of bytes to reserve.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Keil 8051 как запихнуть *.a51 в *.a51 и не получить WARNING
СообщениеДобавлено: 30 май 2015, 22:48 
Заглядывает иногда

Зарегистрирован: 07 фев 2012, 19:31
Сообщения: 118
STACK SEGMENT IDATA -- абсолютный (неперемещаемый)сегмент внутри области памяти IDATA
RSEG STACK -- перемещаемый сегмент принадлежащий сегменту STACK
DS 0х07 -- семь байт расположенные внутри перемещаемого сегмента
Поскольку больше нет перемещаемых сегментов внутри сегмента STACK, перемещаемый сегмент размещается по смещению ноль(0) относительно начала сегмента STACK. Поэтому заносится в SP величина начала сегмента STACK минус один чтобы не пропадал байт, находящийся в начале стека и полностью использовать все байты стека...

_________________
Прерывание на хальте, осложненное ПДП циклом...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Keil 8051 как запихнуть *.a51 в *.a51 и не получить WARNING
СообщениеДобавлено: 30 май 2015, 23:32 
Заглядывает иногда

Зарегистрирован: 06 мар 2013, 23:44
Сообщения: 199
eugene_e_n писал(а):
STACK SEGMENT IDATA -- абсолютный (неперемещаемый)сегмент внутри области памяти IDATA
RSEG STACK -- перемещаемый сегмент принадлежащий сегменту STACK
DS 0х07 -- семь байт расположенные внутри перемещаемого сегмента
Поскольку больше нет перемещаемых сегментов внутри сегмента STACK, перемещаемый сегмент размещается по смещению ноль(0) относительно начала сегмента STACK. Поэтому заносится в SP величина начала сегмента STACK минус один чтобы не пропадал байт, находящийся в начале стека и полностью использовать все байты стека...


Т.е. я правильно понимаю, что перед стеком, идет 7 байт пустого сегмента RSEG STACK и потом уже начинается стек?

Спасибо. Как работает понял. Но все еще не понял зачем?

Почему просто не забить в SP начало (00h)IDATA или просто константу с нужным отступом?
И почему стек начнется с 7 байта адреса, а не с 8го, что логично? (00h+(07h-1d))=06h и при преинкременте байт будет записан в 07h, не кратный 8.

Не злитесь, я действительно не могу понять этого.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Keil 8051 как запихнуть *.a51 в *.a51 и не получить WARNING
СообщениеДобавлено: 31 май 2015, 00:29 
Заглядывает иногда

Зарегистрирован: 07 фев 2012, 19:31
Сообщения: 118
Над тобой довлеет парадигма того, что указатель стека должен начинаться с наибольшего адреса выделенной под стек памяти... Здесь же, все устроено наоборот: начальный указатель стека размещается по наименьшему адресу выделенной под стек памяти. Конкретно в этом случае RSEG и STACK начинаются с адреса 80h и имеют длину 7 байт. Указатель стека устанавливается на начало вышеозначенных сегментов минус единица т.е. на 7fh ...

_________________
Прерывание на хальте, осложненное ПДП циклом...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Keil 8051 как запихнуть *.a51 в *.a51 и не получить WARNING
СообщениеДобавлено: 31 май 2015, 00:37 
Заглядывает иногда

Зарегистрирован: 06 мар 2013, 23:44
Сообщения: 199
eugene_e_n писал(а):
Над тобой довлеет парадигма того, что указатель стека должен начинаться с наибольшего адреса выделенной под стек памяти... Здесь же, все устроено наоборот: начальный указатель стека размещается по наименьшему адресу выделенной под стек памяти. Конкретно в этом случае RSEG и STACK начинаются с адреса 80h и имеют длину 7 байт. Указатель стека устанавливается на начало вышеозначенных сегментов минус единица т.е. на 7fh ...


Не совсем так, я понял откуда и куда здесь растет стек.
Я не совсем понимаю, зачем под него делать сегмент. Если мы наверняка не знаем, будет он занимать 7 байт или 70. Вернее ограничить мы его не можем, зачем 7 байт тогда? Почему просто адрес начала не занести?

Еще одна тайна стала явью, MOV SP, #STACK-1 , #STACK подставляет не размер, а адрес начала.

Осталось понять нафига 7 байт выделяется.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Keil 8051 как запихнуть *.a51 в *.a51 и не получить WARNING
СообщениеДобавлено: 31 май 2015, 01:20 
Заглядывает иногда

Зарегистрирован: 07 фев 2012, 19:31
Сообщения: 118
Ну здесь заложена такая идея: эта величина заложена под потребности данного модуля. Примерно вызов 1-2х уровней подпрограмм и заброс на стек и снятие пары байт на стек и со стека. Но программы пишутся многомодульные и в каждом модуле может находиться такая запись об использовании стека данным модулем:

RSEG STACK
DS ххх
Где ххх -- количество байтов стека используемых данным модулем.
После линковки программы длины всех таких сегментов суммируются и без особенного напряжения создается глубина стека реально используемого всей программой.
НЕ ВОЗБРАНЯЕТСЯ написать одномодульную программу, абсолютную, без каких либо сегментов и ручками все повыставлять под личную ответсвенность программиста...

_________________
Прерывание на хальте, осложненное ПДП циклом...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Keil 8051 как запихнуть *.a51 в *.a51 и не получить WARNING
СообщениеДобавлено: 31 май 2015, 05:12 
Заглядывает иногда

Зарегистрирован: 06 мар 2013, 23:44
Сообщения: 199
eugene_e_n писал(а):
Ну здесь заложена такая идея: эта величина заложена под потребности данного модуля. Примерно вызов 1-2х уровней подпрограмм и заброс на стек и снятие пары байт на стек и со стека. Но программы пишутся многомодульные и в каждом модуле может находиться такая запись об использовании стека данным модулем:

RSEG STACK
DS ххх
Где ххх -- количество байтов стека используемых данным модулем.
После линковки программы длины всех таких сегментов суммируются и без особенного напряжения создается глубина стека реально используемого всей программой.
НЕ ВОЗБРАНЯЕТСЯ написать одномодульную программу, абсолютную, без каких либо сегментов и ручками все повыставлять под личную ответсвенность программиста...


Такс, вроде бы понял.

Те по факту это такая рекомендация, что бы при окончательной сборки можно было проверить, хватит ли стека в пике на все? Но само по себе оно ничего не делает, SP просто закидывается на стартовый адрес и в случае необходимости будет расти до 7Fh?

Из всей этой темы, в итоге я понял, что, чтобы заинклудить какой либо отдельный модуль, мне этот самый модуль сначала необходимо привести к ввиду:

NAME имя_модуля - обозвать модуль

Стек_модуля SEGMENT IDATA - объявить права модуля на место в IDATA
RSEG Стек_модуля - уточнить, что этот кусок свободно перемещаемый
DS число - сообщить расчетный размер выделяемого куска.

Код_модуля SEGMENT CODE - объявить права на место в ROM
CSEG AT начальный_адрес - сказать что код должен начинаться по следующему абсолютному адресу или с помощью RSEG сказать, что код можно пихать куда хочется.
END - сказать что модуль закончен.

Правильно?

Теперь этот файл можно сохранить и использовать инклудом куда хочешь?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Keil 8051 как запихнуть *.a51 в *.a51 и не получить WARNING
СообщениеДобавлено: 31 май 2015, 11:56 
Старожил
Аватара пользователя

Зарегистрирован: 28 дек 2011, 11:24
Сообщения: 4391
Откуда: г. Липецк
Про SEGMENT IDATA могу сказать что у меня он всегда один и обьявлен в основном модуле. Никогда не пробовал делать несколько сегментов стека, да и зачем?

Применение CSEG AT - делает модуль неперемещаемым, и применяется только для сегмента инициализации с таблицей прерываний.
RSEG Имя_сегмента - регистрирует сегмент и обозначает его начало.
Кроме этого что-то маловато видов памяти вы нашли у i51. Давайте считать:
Код:
STACK   SEGMENT   IDATA            ; Стековый сегмент
   RSEG   STACK
   DS      0x10           ; 16 байт

Код:
VARS   SEGMENT   DATA            ; Переменные
   RSEG   VARS
DispReg:   DS   1            ; Регистр
DispCnt:   DS   1            ; Регистр
Dividend:   DS   8            ; 8 регистров
Divider:   DS   8            ; 8 регистров
Quotient:   DS   8            ; 8 регистров

Код:
EXTVAR   SEGMENT   XDATA            ; Переменные во внешней памяти
   RSEG   EXTVAR

Код:
FLAGS   SEGMENT BIT            ; Битовый сегмент 128 бит
   RSEG   FLAGS
ClrMem:   DBIT   1            ; Битовый флаг
ModeA:   DBIT   1            ; Битовый флаг
ModeM:   DBIT   1            ; Битовый флаг
OVF_F:   DBIT   2            ; Битовые флаги

Код:
PROGRAM   SEGMENT   CODE            ; Программа
   CSEG   AT   START_ADR      ;   
   AJMP   Start            ;
   RSEG   PROGRAM            ;
   USING   0              ;

Наложение символьных имен на внешние выводы
Код:
KEY0   BIT   P1.0            ; Битовое имя внешнего вывода
KEY1   BIT   P1.3            ; Битовое имя внешнего вывода
KEY2   BIT   P1.2            ; Битовое имя внешнего вывода

Если же вместо а51 воспользоваться более навороченным Ах51 там видов памяти еще больше.
P.S. Сам никогда им не пользовался, хватало а51.


Вложения:
SEGMENTS.png
SEGMENTS.png [ 24.25 Кб | Просмотров: 23024 ]
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Keil 8051 как запихнуть *.a51 в *.a51 и не получить WARNING
СообщениеДобавлено: 31 май 2015, 15:06 
Старожил
Аватара пользователя

Зарегистрирован: 28 дек 2011, 11:24
Сообщения: 4391
Откуда: г. Липецк
Не совсем по теме, скорее по отладке ассемблерных проектов в Keil. По умолчанию в настройках проекта генерируется только листинг (*.lst). Для ассемблера этот файл никакой полезной смысловой нагрузки не несет, вы увидите только свой ассемблерный листинг с разбивкой на страницы и нумерацией.
Очень полезно для знания что и куда ассемблер положил в прошивку генерировать карту памяти (*.m51). По умолчанию она отключена, ее генерацию надо включить.


Вложения:
MapFile_.png
MapFile_.png [ 14.02 Кб | Просмотров: 22170 ]
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Keil 8051 как запихнуть *.a51 в *.a51 и не получить WARNING
СообщениеДобавлено: 31 май 2015, 16:19 
Заглядывает иногда

Зарегистрирован: 06 мар 2013, 23:44
Сообщения: 199
anakost писал(а):
Про SEGMENT IDATA могу сказать что у меня он всегда один и обьявлен в основном модуле. Никогда не пробовал делать несколько сегментов стека, да и зачем?


Тогда я снова не понимаю нахрена выделять байты под стек в оперативке. Что бы линкер прямо в следующем адресе 02h каком нибудь переменную не развернул что ли?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Keil 8051 как запихнуть *.a51 в *.a51 и не получить WARNING
СообщениеДобавлено: 31 май 2015, 16:35 
Старожил

Зарегистрирован: 27 апр 2013, 13:53
Сообщения: 1496
Есть готовые реализации Форт (Forth) систем для 51 -серии на ассемблере.
Какие то "моменты" можно посмотреть в них :)

P.S. Вроде у Silabs неплохие 51-е кристаллы. По какой необходимости стали изучать 51 ую архитектуру?
Кстати Здесь некоторая подборка литературы по MK и 51-ым


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Keil 8051 как запихнуть *.a51 в *.a51 и не получить WARNING
СообщениеДобавлено: 31 май 2015, 16:58 
Заглядывает иногда

Зарегистрирован: 06 мар 2013, 23:44
Сообщения: 199
KPG писал(а):
Есть готовые реализации Форт (Forth) систем для 51 -серии на ассемблере.
Какие то "моменты" можно посмотреть в них :)

P.S. Вроде у Silabs неплохие 51-е кристаллы. По какой необходимости стали изучать 51 ую архитектуру?
Кстати Здесь некоторая подборка литературы по MK и 51-ым


Спасибо. По работе надо бы выучить x86 Асм. Но его учить лень, думаю сначала C51 подучу, а там уже легче. Да и почему то я к 8051 с того момента как о них узнал, имел симпатию.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 23 ] 


Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB