Микроконтролери и електроника
http://mcu-bg.com/mcu_site/

XC8/Pic18/MPLABX5.50 -поведение на линкера
http://mcu-bg.com/mcu_site/viewtopic.php?f=3&t=18201
Страница 1 от 1

Автор:  stefan63 [ Нед Яну 30, 2022 11:27 am ]
Заглавие:  XC8/Pic18/MPLABX5.50 -поведение на линкера

Нов проект, съвсем прост-мигалка, стотина байта код .
Никакви указания за линкера - кодът се раполага в най-старшите адреси на флаша. Ако заложа някакви ограничения - граници на РОМа, кодеофсет-
линкерът се подчинява - но пак с тенденции да разполага в старшите адреси на разрешения ром. Като махнах ограниченията - пак го засили към
0xffff. Интересно е и ,че в самото начало се ориентираше към 0x1ffff (mcu-то е със 128кБ).
Друг проект, създаден със сорсове- взети от Codeflow, началният хекс се ориентираше към 0x1000 ( същият Пик-18f87k22, има някакво определение за бут блок с избираем размер 1к или 2к). При опитите с кодеофсет и ограничения - се държеше прилично, но с опити да освободи
колкото може повече адреси между 0 и 0x1000. Премахването на ограниченията върна поведението от началото.
Оригиналнота компилация под Флоукоде също разполага кода от адрес 1000 ( и малко код в началото , адрес 0 - ресет вектор и доста байтове от функцията на прекъсването - може би цялата функция).



В "Properties" на XC8 за двата проекта не виждам нищо , което да задава подобно поведение и съм озадачен.
В папките на XC8 виждам две ексета , eдното pic18cc.exe , предполагам е
същинския тунингован компилатор....който може и да не е много добре тунингован.
Не че е нещо фатално, но ми е странно и ме притеснява. ....

////////
При сорсовете от флоукоде имаше следния проблем

Код:
#define FCP_SET_NODDR(Port, Pin, Value)   \
  #if defined (_LAT##Port##Pin) || defined (_LAT##Port##_LAT##Port##Pin##_POSITION) \
LAT##Port##bits.LAT##Port##Pin = Value;\
#else \
   PORT##Port##bits.R##Port##Pin = Value; \
#endif \


Даваше грешка на първия двоен диез. Oправи се като минах от C99 на С90 и чекнах препроцесорът да работи по правилата на CCS.
Някой може ли да ми разясни кое какво е и защо?
Двойният диез е знак за конкатенация?

Страница 1 от 1 Часовете са според зоната UTC + 2 часа [ DST ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/