ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Вторник
16 июля
555122 Топик полностью
symbions (23.10.2014 13:45 - 02.11.2014 02:01, просмотров: 84) ответил Mahagam на компилятор по адресам не ложит. его работа - распихать код по секциям. а вот адреса секциям назначает линкер.
Угу В общем в связке sdcc,sdld и силабовская IDE не работает В программе написал #pragma codeseg CSEG15bl кучка функций К компилятору добавил ключ --codeseg CSEG15bl Если, как указано у Силабса, в качестве линкера использую sdcc, то указания --codeseg CSEG15bl игнорируются, а указание -b CSEG15bl=0x1c00 объявляются ошибочными Если же в качестве линкера указываю sdld с соответсвующими ключами, то sdld отрабатывает, а вот программировать IDE ничего не находит. В общем попробую новую IDE, потом и SDCC. Ну на крайняк попробую бесплатный кейл Добавление: Решил, надо было вниметльней документцацию читать (ну и немного подумать). Напишу, может ещё есть такие же не внимательные страдальцы: В основном файде надо написать #pragma codeseg CSEG (хотя из документации следует, что это подразумевается по умолчанию) В те файлы, в которых лежат функции, что я хочу положить с какого-то конкретного адреса надо написать #pragma codeseg CSEG14bl (CSEG14bl - это новый сегмент данных) Первая ошибка была - эта прагма работает к целому файлу, а не с того места, где я её поставил. Далее дорабатывал настройки проекта, что автоматически выставляются в IDE при выборе компилятора SDCC. В IDE к настройкам компилятора надо добавить --codeseg CSEG14bl --codeseg CSEG (последнее вроде бы подразумевается по умолчанию) В IDE к настройкам линкера (где так же вызывыается всё тот же sdcc) надо добавить -Wl -bCSEG=0x0000 -Wl -bCSEG14bl=0x1c00 -Wl -bCONST=0x1df0 Вторая ошибка была, что я не ставил ключ -Wl. После = стаят адреса, с которых начинается соответсвующий сегмент. Ну и бонус обнаружил - для констант предусмотрен свой сегмен CONST, который можно так же засунуть куда по дальше