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

Do you have a question? Post it now! No Registration Necessary

Translate This Thread From Russian to

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

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

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

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

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



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

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
http://www.dorlov.no-ip.com
http://dimorlus.dynalias.com



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

Quoted text here. Click to load it

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

Quoted text here. Click to load it

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

Quoted text here. Click to load it

  Если ручками позвать 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,classEE%DATA");
#pragma psect const=eeprom_data
const struct s_eeprom_data ee_conf =
    #include "def_conf.c"
;





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

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
http://www.dorlov.no-ip.com
http://dimorlus.dynalias.com



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

Quoted text here. Click to load it


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

picc18 -v  -I. -Ihardware -DTEST_FLAG  -q --asmlist -G -Blarge --opt=all
--chip18%F2520 --char=signed -c -omain.obj main.c

Quoted text here. Click to load it

  -Zg9

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

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

Quoted text here. Click to load it

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


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

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


Re: hitech-c picc18 -- оптимальное кодирование
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, то у них такая
поддержка есть :)


hitech-c picc18 -- оптимальное кодирование
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 появиццо ;)


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



Site Timeline