Показать сообщение отдельно
Старый 19.02.2009, 09:53   #27
Bill
Senior Member
 
Аватар для Bill
 
Регистрация: 26.02.2007
Адрес: Челябинск
Возраст: 70
Сообщений: 2,215
Вес репутации: 1898/88
Bill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant future
По умолчанию Хм... Видимо, простой перевод

Цитата:
Сообщение от МимоПроходил Посмотреть сообщение
Лет 10 программирую на паскале, дельфи. На Си начал недавно - жизнь заставила - PIC программировать.
У меня такой вопрос.
На microPascal тестовая программа вывода на индикатор SSD1770 (Motorola C330, C350) при компилляции выдает UsedRom:381 (байт). Программа проверена в реальном железе. PIC16F84A


На microC UsedRom:390 (байт). Программа проверена в реальном железе.


Алгоритм в обоих примерах абсолютно идентичный.

Есть еще пример на PICC (HI-TECH, PICC 8.05 PL1), в ейной программе HPDPIC.

Пример почему-то нерабочий, хотя если поменять первую процедуру на вот эту - то работает.Размер hex файла - 331 (words).

Вопрос - почему? паскаль сгенерировал hex -файл меньшего размера чем Си?
PS: оптимизацию ни в микроСи ни в микроПаскаль не трогал (не знаю где его ставить). На ПикСи выставил по максимуму.

ЗЫЫ: Я хочу сказать, что если бы Hi-TEC написал PIC-Pascal , то разница в hex-файлах тоже была бы минимальна между Си и Паскаль...
Прошу за флуд сильно не пинать.
с Паскаля на Си приводит к неоптимальности (хотя и ненамного). Код можно немного сооптимизировать. Например,
Код:
if ((buf & (1 << i))==(1 << i)) {PORTA.F0 = 1;} else {PORTA.F0=0;};
можно записать чуть чуть проще
Код:
    if (buf & (1 << i))
        PORTA.F0 = 1;
    else
        PORTA.F0 = 0;
Или более компактная запись
Код:
 PORTA.F0 = (buf & (1<<i))? 1 : 0;
Bill вне форума