Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Входит ли файл regxxxx.h в объём программы ?
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > Программирование
TeddyIn
Доброго времени суток!
Хочу освоить С51, в частности например P89LPC9107, в даташите написано, что память программ - 1кВ (4 страницы по 256 байт),

Но если писать к нему прогу, например в Кейле, то там только #include <REG9107.H> уже больше двух килобайт весит, и соответственно, .НЕХ код получается почти 4 кВ??? Как такое возможно, и как его прошивать?

Заранее извиняюсь за незнание smile.gif
psL
Цитата(TeddyIn @ Jan 4 2009, 09:37) *
там только #include <REG9107.H> уже больше двух килобайт весит, и соответственно, .НЕХ код получается почти 4 кВ??? Как такое возможно, и как его прошивать?


#include <REG9107.H> - это грубо говоря привязки символьных имен к конкретным адресам в контроллере. Размер этого файла на размер hex влиять не должен. Минимальный размер можно посмотреть если собрать проект с одним С файлом:
Код
#include <REG9107.H>

void main(void)
{
    for(;;);
}

тогда размер .НЕХ будет зависеть только от размера стартап-кода.
TeddyIn
Цитата(psL @ Jan 4 2009, 17:54) *
#include <REG9107.H> - это грубо говоря привязки символьных имен к конкретным адресам в контроллере. Размер этого файла на размер hex влиять не должен. Минимальный размер можно посмотреть если собрать проект с одним С файлом:
Код
#include <REG9107.H>

void main(void)
{
    for(;;);
}

тогда размер .НЕХ будет зависеть только от размера стартап-кода.


Спасибо, действительно, 136 В получилось, да и ещё на схем.нет говорят, что BIN файл должен быть меньше, чем НЕХ.
Тогда вот еще же есть всякие stdio, math ... - они то уж влияют на размер? (хотя щас сам посмотрю)

Ан нет, добавил STDIO.H, размер тот же ))
Alex11
Сами заголовочные файлы не влияют на размер, как Вы сами убедились, но как только Вы используете хоть одну функцию из stdio, например, то тут же приплывет весь ввод-вывод по полной программе.
rezident
Цитата(TeddyIn @ Jan 4 2009, 13:14) *
на схем.нет говорят, что BIN файл должен быть меньше, чем НЕХ.
Прошивка в формате BIN имеет тот же размер, что и прошивка в памяти программ микроконтроллера. А файл в формате (Intel) HEX это всего лишь специальный формат представления данных той же прошивки. Если прошивка представляет из себя непрерывную область памяти (в противном случае вовсе не обязательно, что следующее утверждение справедливо), то HEX-файл на диске вашего компьютера конечно же больше места займет. Но в процессе загрузки его в память программ микроконтроллера он преобразуется в тот же размер, что и BIN. Есть специальные утилиты BIN2HEX и HEX2BIN для преобразования файлов из одного формата в другой. Найти их можно, например, на сайте Keil. Так что по большому счету для вас нет особой разницы в каком формате будет представлена прошивка.
TeddyIn
Не могу найти в даташите к проге, в чем сии цифры измеряются? smile.gif


Извините за вопрос чайника, но уже все выяснил -> вторая цифра - это размер BIN кода в байтах )))
(скачал и запустил НЕХ2ВIN)
а насчет первой принципе уже все рано )
TeddyIn
Спасибо a14.gif , скачал сейчас, и действительно, размер BIN файла почти в 3 раза меньше, чем HEX-80, который создаёт Keil! Что собственно очень сильно радует biggrin.gif
DeadMoroz
1я - в байт.бит (т.к переменные также можно размещать в bit-addressable области SFR).
TeddyIn
ок
TeddyIn
У кого нибудь такое было - если его запустить - остановить - снова запустить, то значение логического порта, которое по идее должно оставаться 1 при новом запуске (без сброса) сбрасывается на 0...
TeddyIn
Да да да ), так и есть - загнал вместо аналайзера весь выход на UART - и там все нормально (останавливай не останавливай - на dыходе printf все значения правильные) smile.gif
Выявлен баг 3-ей версии Keil.
У кого лицензионный Кейл? - можете сообщить производителю - пусть исправляет в следующей ревизии!
тау
У кейла всё что касается printf scanf и имхо putchar - в отладчике не симулируется и кейл в окно SERIAL выводит нечто изнутри себя , видимо перехватывая сами входы в функции в симуляторе и не давая им выполняться. Может отсюда ноги растут?
SBUF=хх не работает через окно SERIAL !!!!
Таким образом эмуляция не на уровне буфера приемопередатчика а по самим функциям . Проверял неоднократно. Багом они это не посчитают а пошлют.
TeddyIn
Цитата(тау @ Jan 7 2009, 23:30) *
видимо перехватывая сами входы в функции в симуляторе и не давая им выполняться. Может отсюда ноги растут?

а что это значит? не давая им где выполняться?
Цитата
Таким образом эмуляция не на уровне буфера приемопередатчика а по самим функциям .


А разве тут есть какие то различия?
тау
Цитата
а что это значит? не давая им где выполняться?

В теле кода printf() например . попробуйте в окне дизассм поставить там точки прерывания(отладки) - никогда не остановится . гыгы.
Цитата
А разве тут есть какие то различия?

огромные, нельзя например отладить через SeRIAL окно свою программу вывода.
Сергей Борщ
Цитата(тау @ Jan 7 2009, 16:24) *
огромные, нельзя например отладить через SeRIAL окно свою программу вывода.
Ее можно отладить с реальным терминалом. Кейловый отладчик позволяет перенаправить UART из симулятора на реальный COM-порт. Дальше, если в компе есть два свободных COM-порта, замыкаем их нуль-модемным кабелем, а если нет - ставим виртуальный нуль-модем и на один из его портов натравливаем симулятор, на второй - терминалку или PC-приложения общения с вашим прибором. Шикарная опция, позволяет одновременно пошагово отлаживать и вашу программу и ответное PC-приложение.
TeddyIn
Оригинально гы )
но я UART пока не планирую пользовать выше я написал, что пользовался этим окном Кейла для того, чтобы в численном виде посмотреть то, что на выходе шима, т.к. в окне аналайзера это не очень удобно.
Но я запомню cranky.gif может и пригодится..
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.