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

XC8 пълни флаш-а наобратно отдолу нагоре
http://mcu-bg.com/mcu_site/viewtopic.php?f=3&t=14703
Страница 1 от 1

Автор:  ferdok9 [ Сря Юли 27, 2016 1:44 pm ]
Заглавие:  XC8 пълни флаш-а наобратно отдолу нагоре

Опитвам се да започна да работя с XC8, но ме дразни факта че когато флашвам с PicKit3 отнема мн време(около 1-2 мин.).
Поразрових и видях причината слага няколко байта в началото на флаша
и после започва да пълни отдолунагоре, демек от 0хFFFF към 0. Решението което намерих е да кажа на компилатора че флаша му е по малък от реалното(--ROM=0-1ff). Това ми вади като обобщение.
Въпроса е, мога ли да накарам линкера, да разполага нещата от 0 към края на флаша а не обратно както е сега.

--------------------------------NORMAL | Pro mode |--ROM=0-1ff


Legend:
- = Unused memory
F = Filled ROM
S = Stored serial code
A = Stored ASCII string
R = Reserved for checksum
C = Stored checksum result
T = Trailing code
& = Find & replace opcode
X = Find & delete opcode
1 = dist/default/production\CAN.X.production.hex
00000000: 1111------------------------------------------------------------
00000080: ------------------------------------------------------------1111
000000C0: 1111111111111111111111111111111111111111111111111111111111111111
00000100: 1111111111111111111111111111111111111111111111111111111111111111
00000140: 1111111111111111111111111111111111111111111111111111111111111111
00000180: 1111111111111111111111111111111111111111111111111111111111111111
00200000: 11111111--------------------------------------------------------
00300000: 11111111111111--------------------------------------------------

Автор:  tolstolob [ Сря Юли 27, 2016 3:12 pm ]
Заглавие:  Re: XC8 пълни флаш-а наобратно отдолу нагоре

Не ти препоръчвам да изнасилваш нещата, за да не ти излязат проблеми с пойнтърите - ако имаш такива, които могат да сочат както към РАМ, така и към РОМ обекти. Това важи за по-стартите 16-ки и 18-ките. В тези случаи, ако XC-то види, че имаш такива пойнтъри, при наличие на достатъчно флаш, кода ще бъде разположен на адреси над последния адрес на РАМ-а (например за модел с ~1.5 kB RAM, кода ще започва от адрес 0х600). Така програмата ти ще знае рънтайм даден пойнтър към какъв вид памет сочи, оттам и достъпа ще се генерира с правилните инструкции.
Гледам, че при новите 16-ки (enhanced midrange) са емулирали линейно адресно пространство при индиректен достъп, и там такива проблеми не би трябвало да има.

Автор:  ferdok9 [ Сря Юли 27, 2016 3:44 pm ]
Заглавие:  Re: XC8 пълни флаш-а наобратно отдолу нагоре

Звучи разумно, но за сега това ми единствения вариянт. Когато напрявя накаква работеща версия ще го върна на дефулт.
Интересното е че другите компилатори с който опитах да билдна не се държат по този начин. C18 и CCS си линкват нормално.
Възможно ли е аз да съм разбъзикал някоя настройка? Но трябва да отбележа че съм го правил и на нови инсталации, на разл. компютри.

Автор:  stefan63 [ Сря Юли 27, 2016 3:54 pm ]
Заглавие:  Re: XC8 пълни флаш-а наобратно отдолу нагоре

Не знам дали тук е възможно, би трябвало да е:
Дефинираш код сегмент с малка дължина (която увеличаваш ,когато програмата ти го прехвърли) и твое си име, и начален адрес - в малките адреси. И някъде в сорса или линкера указваш ,че искаш да се ползва този сегмент.

Автор:  ferdok9 [ Сря Юли 27, 2016 4:10 pm ]
Заглавие:  Re: XC8 пълни флаш-а наобратно отдолу нагоре

Хъъъм, аз май точно това правя. Не съм мн запознат.

Автор:  tolstolob [ Сря Юли 27, 2016 4:46 pm ]
Заглавие:  Re: XC8 пълни флаш-а наобратно отдолу нагоре

Правилно си ограничил горния адрес. Едва ли си има смисъл от други гимнастики.

Автор:  ferdok9 [ Сря Юли 27, 2016 5:40 pm ]
Заглавие:  Re: XC8 пълни флаш-а наобратно отдолу нагоре

Решение е до някаква степен. Но гадното е, че това е пач, а не истинското решение на проблема. Интересно ми е дали има настройка която да накара линкера да започне да пълни от 0 към 0xFFFF.

Автор:  stefan63 [ Сря Юли 27, 2016 7:14 pm ]
Заглавие:  Re: XC8 пълни флаш-а наобратно отдолу нагоре

?
http://electronics.stackexchange.com/qu ... mplabx-xc8

Автор:  tolstolob [ Сря Юли 27, 2016 7:42 pm ]
Заглавие:  Re: XC8 пълни флаш-а наобратно отдолу нагоре

Не видях да има специална опция за целта. Има "Format hex file for download" - това има ли ефект?
А за кой модел пик, версия и режим (free, pro) на XC-то става дума?

Автор:  ferdok9 [ Чет Юли 28, 2016 12:31 am ]
Заглавие:  Re: XC8 пълни флаш-а наобратно отдолу нагоре

PIC18F26K80
MPLAB X IDE v3.35
XC8 v1.38
Mode - Pro
"Format hex file for download" не мога да го намеря къде е.

Автор:  tolstolob [ Чет Юли 28, 2016 1:27 pm ]
Заглавие:  Re: XC8 пълни флаш-а наобратно отдолу нагоре

Project settings-> linker options

Автор:  ferdok9 [ Чет Юли 28, 2016 3:20 pm ]
Заглавие:  Re: XC8 пълни флаш-а наобратно отдолу нагоре

"Format hex file for download" това излезе.
Леле а колко съм бил забил, че да не го видя.

00000000: 11111111FFFFFFFF------------------------------------------------
0000FEC0: ------------------------------------------------FFFFFFFFFFFF1111
0000FF00: 1111111111111111111111111111111111111111111111111111111111111111
0000FF40: 1111111111111111111111111111111111111111111111111111111111111111
0000FF80: 1111111111111111111111111111111111111111111111111111111111111111
0000FFC0: 1111111111111111111111111111111111111111111111111111111111111111
00200000: 11111111--------------------------------------------------------
00300000: 11111111111111--------------------------------------------------

Автор:  slav4o.com [ Пет Юли 29, 2016 4:21 pm ]
Заглавие:  Re: XC8 пълни флаш-а наобратно отдолу нагоре

Ми по принцип е така. То май и на старите компилатори пълни отдолу нагоре. Но доколкото съм забелязал F-овете се прескачат бързо. И ми се струва че проблема е някъде другаде. Имаше опция "Fast Programming" поне при PICkit2. И какъв е този пик, толкова ли флаш има ? Със XC8 се пише за 16ки и 18ки както казаха. Де се вика и на бавна скорост трябва да се пълни отгоре до долу доста по-бързо.

Автор:  ferdok9 [ Нед Сеп 18, 2016 11:24 pm ]
Заглавие:  Re: XC8 пълни флаш-а наобратно отдолу нагоре

Да се знае!
Намерих половинчат отговор.
А именно, че ако в mein-а има Interrupt реагира така:
HEX File Usage Map:

Legend:
- = Unused memory
F = Filled ROM
S = Stored serial code
A = Stored ASCII string
R = Reserved for checksum
C = Stored checksum result
T = Trailing code
& = Find & replace opcode
X = Find & delete opcode
1 = dist/default/production\CANTX.X.production.hex
00000000: 1111----11111111111111111111111111111111111111111111111111111111
00000040: 1111111111111111111111111111111111111111111111111111111111111111
00000080: 1111111111111111111111111111111111111111111111111111111111111111
000000C0: 1111111111111111111111111111111111111111111111111111111111111111
00000100: 1111111111111111111111111111111111111111111111111111111111111111
00000140: 1111111111111111111111111111111111111111111111111111111111111111
00000180: 1111111111111111111111111111111111111111111111111111111111111111
000001C0: 1111111111111111111111111111111111111111111111111111111111111111
00000200: 1111111111111111111111111111111111111111111111111111111111111111
00000240: 1111111111------------------------------------------------------
00200000: 11111111--------------------------------------------------------
00300000: 11111111111111--------------------------------------------------

Ако в mein-а няма Interrupt реагира така:
00000000: 1111------------------------------------------------------------
0000FDC0: ------------1111111111111111111111111111111111111111111111111111
0000FE00: 1111111111111111111111111111111111111111111111111111111111111111
0000FE40: 1111111111111111111111111111111111111111111111111111111111111111
0000FE80: 1111111111111111111111111111111111111111111111111111111111111111
0000FEC0: 1111111111111111111111111111111111111111111111111111111111111111
0000FF00: 1111111111111111111111111111111111111111111111111111111111111111
0000FF40: 1111111111111111111111111111111111111111111111111111111111111111
0000FF80: 1111111111111111111111111111111111111111111111111111111111111111
0000FFC0: 1111111111111111111111111111111111111111111111111111111111111111
00200000: 11111111--------------------------------------------------------
00300000: 11111111111111--------------------------------------------------

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