hitech-c picc18 -- оптимальное кодирование

Немедленно нажми на RESET, All!

Посоветуйте где почитать (мануалы изучил) на счёт написания более-менеe оптимального кода для сабжевой платформы.

Вот у меня после компиляции rdata (access bank, который COMRAM класс) занимает 13 байт. Следовательно оно за каждой переменной очень сложными методами обращается, аж в листинг страшно смотреть. А в -Bsmall уже не лезет. Выборочно near прописывать? Могло бы и само.

PS: DO опять жжот. Как было половина опций недокументировано, так и осталось. И ещё добавили, в стиля GNU...

PPS: Вопрос на засыпку -- как инициализировать структуру в eeprom, средствами языка C (т.е. считать sizeof() вручную -- не предлагать)?

Reply to
Kirill Frolov
Loading thread data ...

 X-Virus-Scanned: amavisd-new at bezeqint.net

Hello, Kirill Frolov! You wrote in conference fido7.ru.embedded on Thu, 17 Aug 2006 09:11:20

+0000 (UTC):

KF> Посоветуйте где почитать (мануалы изучил) на счёт написания KF> более-менеe оптимального кода для сабжевой платформы.

Почитать про архитектуру кристалла, представлять себе какие действия какой код порождают и исходя из этого и писать.

KF> PS: DO опять жжот. Как было половина опций недокументировано, так и KF> осталось. И ещё добавили, в стиля GNU...

Какие именно опции конкретно не документированы?

KF> PPS: Вопрос на засыпку -- как инициализировать структуру в eeprom, KF> средствами языка C (т.е. считать sizeof() вручную -- не предлагать)?

AFAIK - никак.

dima

formatting link

Reply to
Dmitry Orlov

Это конечно понятно. Но для этого опыта набраться надо. Я на picc18 ранее не писал. Я конечно понимаю, что более одного аргуента размера FAST ему лучше не подсовывать и прочие вещи характерные для 8 бит, но у pic, по сравнение с x51, например, своя специфика. Код как-то веселей выглядит, но всё равно страшно.

picc -v -v -v ... и сам смотри. А их там -- в 2 раза больше ещё.

Если ручками позвать cpp, c1, pgen и т.п., до получения ассемблера, из которого потомм sed'ом вырезать лишнее -- то можно. Впрочем можно просто сгенерить вначале асемблер (-S) он (ассемблер -- он два раза вызывается) изматерится, но файл выдаст, а в нём, как ни странно, psect eeprom_data с неверным class=CODE уже почему-то отсутствует. Остаётся ещё раз пропустить через ассемблер и получить готовый к компоновке объектный файл с байтами в eeprom. Вот для чего и нужен Makefile. В "IDE" может действительно -- никак. НЕ знаю.

Пример:

eeprom_data.obj: eeprom_data.as

eeprom_data.as: hardware/eeprom_data.c # warning приводящий к ошибке - игнорируется $(CC) $(CFLAGS) -S -o$@ $< || true

#include "eeprom.h"

asm("\tpsect eeprom_data,class=EEDATA"); #pragma psect const=eeprom_data const struct s_eeprom_data ee_conf = #include "def_conf.c" ;

Reply to
Kirill Frolov

как в picc18 таблицу глобальных символов модуля проще посмотреть? (я dump конечно умею, но мне бы в листинге)

Reply to
Kirill Frolov

KF> PPS: Вопрос на засыпку -- как инициализировать структуру в eeprom, KF> средствами языка C (т.е. считать sizeof() вручную -- не предлагать)? если бы программатор поддерживал bin-ы с разными секциями то в случае с компиляцией и сборкой с помощью gcc такое было бы возможно :)

хотя в принципе можно Makefile'ом генерить несколько hex-файлов из одного .elf.

eeprom.hex: $(TARGET).elf avr-objcopy -O ihex -j .eeprom $< $@ flash.hex: $(TARGET).elf avr-objcopy -O ihex -R .eeprom $< $@

но опять же остается вопрос поддерживает ли программатор загрузку сразу двух раздельных hex-файлов.

в принципе если взять программатор AS2/3 от argussoft, то у них такая поддержка есть :)

Reply to
Dmitry E. Oboukhov

On 15:27 Thu 17 Aug , Dmitry E. Oboukhov wrote: KF>> PPS: Вопрос на засыпку -- как инициализировать структуру в eeprom, KF>> средствами языка C (т.е. считать sizeof() вручную -- не предлагать)? DEO> если бы программатор поддерживал bin-ы с разными секциями то в случае с DEO> компиляцией и сборкой с помощью gcc такое было бы возможно :) DEO>

DEO> хотя в принципе можно Makefile'ом генерить несколько hex-файлов из DEO> одного .elf. DEO>

DEO> eeprom.hex: $(TARGET).elf DEO> avr-objcopy -O ihex -j .eeprom $< $@ DEO> flash.hex: $(TARGET).elf DEO> avr-objcopy -O ihex -R .eeprom $< $@ DEO>

DEO> но опять же остается вопрос поддерживает ли программатор загрузку сразу DEO> двух раздельных hex-файлов. DEO>

DEO> в принципе если взять программатор AS2/3 от argussoft, то у них такая DEO> поддержка есть :) сорри PS: не дописал

PS: а для pic'ов надо ждать когда для них gcc появиццо ;)

Reply to
Dmitry E. Oboukhov

KF> eeprom_data.as: hardware/eeprom_data.c KF> # warning приводящий к ошибке - игнорируется KF> $(CC) $(CFLAGS) -S -o$@ $< || true тут можно писать

-$(CC) чтобы игнорировать ошибку

Reply to
Dmitry E. Oboukhov

 X-Virus-Scanned: amavisd-new at bezeqint.net

Hello, Kirill Frolov! You wrote in conference fido7.ru.embedded to Dmitry Orlov on Thu, 17 Aug

2006 09:45:08 +0000 (UTC):

KF> FAST ему лучше не подсовывать и прочие вещи характерные для 8 бит, KF> но у pic, по сравнение с x51, например, своя специфика. Код как-то KF> веселей выглядит, но всё равно страшно.

Я как-то не особо туда заглядываю, работает - и ладно.

KF>>> PS: DO опять жжот. Как было половина опций недокументировано, так KF>>> и осталось. И ещё добавили, в стиля GNU... >> Какие именно опции конкретно не документированы?

KF> picc -v -v -v ... и сам смотри. А их там -- в 2 раза больше ещё.

C:\HTSOFT\PIC18\BIN>picc -v -v -v HI-TECH PICC COMPILER (Microchip PICmicro) V9.50PL2 Copyright (C) 1984-2006 HI-TECH SOFTWARE licensed for evaluation purposes only this licence will expire on Mon, 29 May 2006 (902) no chip name specified; use "PICC" --CHIPINFO to see available chip names

Что-то ты не то говоришь... Если ты под -v -v -v имеешь в виду --help, то все это в pdf'е и бумажной документации описано. Повторяю вопрос. Какая _конкретно_ опция не документирована.

KF>>> PPS: Вопрос на засыпку -- как инициализировать структуру в eeprom, KF>>> средствами языка C (т.е. считать sizeof() вручную -- не KF>>> предлагать)? >> AFAIK - никак.

KF> Если ручками позвать cpp, c1, pgen и т.п., до получения KF> ассемблера, из которого потомм sed'ом вырезать лишнее -- то можно. KF> Впрочем можно просто сгенерить вначале асемблер (-S) он (ассемблер KF> -- он два раза вызывается) изматерится, но файл выдаст, а в нём, как

Тогда уж проще сразу hex сгенерить, но все это уже не "средствами С".

dima

formatting link

Reply to
Dmitry Orlov

Это ты после -v ещё впиши чего делать собрался. А оно тебе с комментариями выдаст. Например:

picc18 -v -I. -Ihardware -DTEST_FLAG -q --asmlist -G -Blarge --opt=all

--chip=18F2520 --char=signed -c -omain.obj main.c

-Zg9

Ты посмотри хоть, мплаб тоже всё это выводит...

Или вот классы памяти. По обрывкам документации от разных версий компиляторов более-менее целостное представление конечно складывается, но гораздо лучше когда оно в одном месте чётко описано.

У меня именно средства Ц. В том смысле что исходник-то на C описывается. А hex его чем-то генерить надо и причём иметь представление об адресации eeprom, размерах sizeof(), выравнивании -- откуда ты это узнаешь? Тут компилятор об этом всё-таки заботится.

Reply to
Kirill Frolov

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.