Перейти к содержанию
    

Дурацкий вопрос: а как пустить TMS320VC5506?

Здравствуйте.

 

Впервые сделал проект на 55 процессоре. Система простая: программа загружается из внешней флешовки встроеннным в проц бутлоадером, и дальше работает из ОЗУ. Дошло дело до пуска, и вылез вопрос - как выставить нужную конфигурацию возврата (fast == use RETA)?

 

 

- Бутлоадер по описанию использует конфигурацию с медленным возвратом.

- Компилятор генерит код под быстрый возврат, и это правильно.

- Конфигурация задается в ресетном векторе, дефолтовая таблица векторов - у бутлоадера в ROM.

- Бутлоадер передаст управление куда ему скажут, но конфигурацию-то поменять уже, вроде как, нельзя? Если перегрузить IVPD указателем на свою таблицу с правильным вектором и повторить ресет, то в IVPD при этом опять запишутся дефолтовые FFFF, и пустится опять бутлоадер? А если выполнить TRAP #0/INTR #0, то переключится ли конфигурация?

 

Понимаю, что все элементарно, но как? Заранее благодарен за ответы.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да...видимо, техасовский 55 процессор - штука редкостная, про которую никто ничего не слышал...

 

А между тем еще вопросик появился. hex55 упорно не желает видеть и грузить в .bss секцию .cinit. Линькуется все, естественно, с опцией -cr (инициализация переменных на этапе загрузки). Если линьковать с опцией -c (инициализация в рантайме), то памяти не хватит. Да и не солидно как-то - инициализизировать RAM из RAM...

 

Может, кто-нибудь посоветует варианты? Заранее благодарен.

 

P.S. Документация TI и CCS - песня та еще. Насколько же у всяких ADов, Атмелов, Кейлов и Иаров все человечнее!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да...видимо, техасовский 55 процессор - штука редкостная, про которую никто ничего не слышал...

 

А между тем еще вопросик появился. hex55 упорно не желает видеть и грузить в .bss секцию .cinit. Линькуется все, естественно, с опцией -cr (инициализация переменных на этапе загрузки). Если линьковать с опцией -c (инициализация в рантайме), то памяти не хватит. Да и не солидно как-то - инициализизировать RAM из RAM...

 

Может, кто-нибудь посоветует варианты? Заранее благодарен.

 

Вот участок makefile с ключами компиляции/линковки/hex оставшегося ещё с тех времён, когда занимался C5502 (грузилось всё с i2c-флешки):

PRJ_NAME = mr04

!if $d(OPC_DEBUG)
DIR_OUT = DEBUG.OUT
!else
DIR_OUT = RELEASE.OUT
!endif

DIR_CGT = $(TI_DIR)c5500\cgtools\bin

DEPEND = *.h makefile
DEPEND_ASM = $(DEPEND) *.inc

F_CC = "$(DIR_CGT)\cl55" -b -q -s -al -as
F_CC = $(F_CC) -fr $(DIR_OUT) -fs $(DIR_OUT) -ft $(DIR_OUT)
F_CC = $(F_CC) -fb $(DIR_OUT) -ff $(DIR_OUT)
F_CC = $(F_CC) -i"C55X_C_DIR" -i$(DIR_OUT)
F_CC = $(F_CC) -d"_DEBUG" -d"CHIP_5502"
F_CC = $(F_CC) -mb -ms -v5502 -o1 -oi0 -pdel10 -pdsr69 -pdsr172 $(TAIL_C)

F_LNK = -z -abs -c -b -w -ec_int00
F_LNK = $(F_LNK) -m$(DIR_OUT)/$(PRJ_NAME).map
F_LNK = $(F_LNK) -o$(DIR_OUT)/$(PRJ_NAME).out
F_LNK = $(F_LNK) -x -i"C55X_C_DIR" -l"rts.lib"
#F_LNK = $(F_LNK) -xml_link_info=$(DIR_OUT)/$(PRJ_NAME).plc

F_HEX = -q -i -memwidth 8 -boot
...

Обратите внимание на опции -mb, -mc в ключах компилятора и опцию -c - в ключах линковщика. Инитилось всё загрузчиком. Все константы в исходниках должны быть с const.

 

P.S. Документация TI и CCS - песня та еще. Насколько же у всяких ADов, Атмелов, Кейлов и Иаров все человечнее!

а то! ;)

Изменено пользователем jcxz

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо огромное.

Завтра с утра на работе буду тщательно изучать детали вашего файла - у меня все там. Наверняка, что-нибудь полезное выцеплю. Но, на память, линьковка у вас с "-c" - значит, .cinit грузится в процессор, и в рантайме инициализирует переменные в .bss. Т.е. ОЗУ расходуется дважды. У меня, увы, с RAM напряги, а инициализаций много. С константами ясно - они пишутся в другую секцию (вроде, .data), которая грузится абсолютно нормально - также, как и код (.text) программы.

Офигеваю над Техасом: по опыту с ADSP самое элементарное дело - загрузить из флешки память программ и данных. А тут такой гемор, будто я хочу странного.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Так вроде всё правильно делается - инициализацией переменных занимается не загрузчик, а startup си-программы. А загрузчик только грузит все секции в RAM, а потом запускается startup, который не зависит от того, откуда грузится прога, поэтому сам ничего из флешки грузить не может.

У меня была такая же проблема с нехваткой ОЗУ и я перепробовал все ключи компилятора и компоновщика и эти - оптимальные.

Сэкономить место можете только Вы сами, например - можно скомпоновать секции .cinit и какие-то части .bss (или своего сегмента неинициализированной памяти) на одни и те же адреса. Ведь, как правило, суммарный размер секций .bss в программе много больше чем .cinit.

Изменено пользователем jcxz

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Опция "-cr" вместо "-с" позволяет не пускать инициализацию из startup. Линькер, вроде, честно ее отрабатывает. И загрузчик в ROM на кристалле грузит как память программ так и данных - ему вообще пофиг, что грузить. Но между ними - hex55, от которого я не могу добиться толку. Уже дошел до мысли состряпать собственный вариант hex55 - формат выходного файла линькера в документации вроде расписан, таблиц cinit и загрузочных тоже. Глупо, конечно, велосипед изобретать, а что делать? Хотя, как вариант развития вашей идеи, на месте cinit можно потом heap разместить...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Конечно, я так и делал. И инициализированных (не нулями) переменных старался делать минимум. Еще, для уменьшения размера, перекомпилил rts55.lib, выбросив оттуда все ненужные функции.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

...Еще, для уменьшения размера, перекомпилил rts55.lib, выбросив оттуда все ненужные функции.

Однако. Неужели линькер сам этого не делает? Завтра гляну.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...