| Автор |
Съобщение |
|
ferdok9
Ранг: Минаващ
Регистриран на: Пет Юли 08, 2011 4:59 pm Мнения: 17
|
 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--------------------------------------------------
|
| Сря Юли 27, 2016 1:44 pm |
|
 |
|
tolstolob
Ранг: Ориентиран
Регистриран на: Вто Фев 06, 2007 2:45 am Мнения: 263
|
 Re: XC8 пълни флаш-а наобратно отдолу нагоре
Не ти препоръчвам да изнасилваш нещата, за да не ти излязат проблеми с пойнтърите - ако имаш такива, които могат да сочат както към РАМ, така и към РОМ обекти. Това важи за по-стартите 16-ки и 18-ките. В тези случаи, ако XC-то види, че имаш такива пойнтъри, при наличие на достатъчно флаш, кода ще бъде разположен на адреси над последния адрес на РАМ-а (например за модел с ~1.5 kB RAM, кода ще започва от адрес 0х600). Така програмата ти ще знае рънтайм даден пойнтър към какъв вид памет сочи, оттам и достъпа ще се генерира с правилните инструкции. Гледам, че при новите 16-ки (enhanced midrange) са емулирали линейно адресно пространство при индиректен достъп, и там такива проблеми не би трябвало да има.
|
| Сря Юли 27, 2016 3:12 pm |
|
 |
|
ferdok9
Ранг: Минаващ
Регистриран на: Пет Юли 08, 2011 4:59 pm Мнения: 17
|
 Re: XC8 пълни флаш-а наобратно отдолу нагоре
Звучи разумно, но за сега това ми единствения вариянт. Когато напрявя накаква работеща версия ще го върна на дефулт. Интересното е че другите компилатори с който опитах да билдна не се държат по този начин. C18 и CCS си линкват нормално. Възможно ли е аз да съм разбъзикал някоя настройка? Но трябва да отбележа че съм го правил и на нови инсталации, на разл. компютри.
|
| Сря Юли 27, 2016 3:44 pm |
|
 |
|
stefan63
Ранг: Форумен бог
Регистриран на: Вто Фев 07, 2012 11:22 pm Мнения: 3084
|
 Re: XC8 пълни флаш-а наобратно отдолу нагоре
Не знам дали тук е възможно, би трябвало да е: Дефинираш код сегмент с малка дължина (която увеличаваш ,когато програмата ти го прехвърли) и твое си име, и начален адрес - в малките адреси. И някъде в сорса или линкера указваш ,че искаш да се ползва този сегмент.
|
| Сря Юли 27, 2016 3:54 pm |
|
 |
|
ferdok9
Ранг: Минаващ
Регистриран на: Пет Юли 08, 2011 4:59 pm Мнения: 17
|
 Re: XC8 пълни флаш-а наобратно отдолу нагоре
Хъъъм, аз май точно това правя. Не съм мн запознат.
|
| Сря Юли 27, 2016 4:10 pm |
|
 |
|
tolstolob
Ранг: Ориентиран
Регистриран на: Вто Фев 06, 2007 2:45 am Мнения: 263
|
 Re: XC8 пълни флаш-а наобратно отдолу нагоре
Правилно си ограничил горния адрес. Едва ли си има смисъл от други гимнастики.
|
| Сря Юли 27, 2016 4:46 pm |
|
 |
|
ferdok9
Ранг: Минаващ
Регистриран на: Пет Юли 08, 2011 4:59 pm Мнения: 17
|
 Re: XC8 пълни флаш-а наобратно отдолу нагоре
Решение е до някаква степен. Но гадното е, че това е пач, а не истинското решение на проблема. Интересно ми е дали има настройка която да накара линкера да започне да пълни от 0 към 0xFFFF.
|
| Сря Юли 27, 2016 5:40 pm |
|
 |
|
stefan63
Ранг: Форумен бог
Регистриран на: Вто Фев 07, 2012 11:22 pm Мнения: 3084
|
 Re: XC8 пълни флаш-а наобратно отдолу нагоре
|
| Сря Юли 27, 2016 7:14 pm |
|
 |
|
tolstolob
Ранг: Ориентиран
Регистриран на: Вто Фев 06, 2007 2:45 am Мнения: 263
|
 Re: XC8 пълни флаш-а наобратно отдолу нагоре
Не видях да има специална опция за целта. Има "Format hex file for download" - това има ли ефект? А за кой модел пик, версия и режим (free, pro) на XC-то става дума?
|
| Сря Юли 27, 2016 7:42 pm |
|
 |
|
ferdok9
Ранг: Минаващ
Регистриран на: Пет Юли 08, 2011 4:59 pm Мнения: 17
|
 Re: XC8 пълни флаш-а наобратно отдолу нагоре
PIC18F26K80 MPLAB X IDE v3.35 XC8 v1.38 Mode - Pro "Format hex file for download" не мога да го намеря къде е.
|
| Чет Юли 28, 2016 12:31 am |
|
 |
|
tolstolob
Ранг: Ориентиран
Регистриран на: Вто Фев 06, 2007 2:45 am Мнения: 263
|
 Re: XC8 пълни флаш-а наобратно отдолу нагоре
Project settings-> linker options
|
| Чет Юли 28, 2016 1:27 pm |
|
 |
|
ferdok9
Ранг: Минаващ
Регистриран на: Пет Юли 08, 2011 4:59 pm Мнения: 17
|
 Re: XC8 пълни флаш-а наобратно отдолу нагоре
"Format hex file for download" това излезе. Леле а колко съм бил забил, че да не го видя.
00000000: 11111111FFFFFFFF------------------------------------------------ 0000FEC0: ------------------------------------------------FFFFFFFFFFFF1111 0000FF00: 1111111111111111111111111111111111111111111111111111111111111111 0000FF40: 1111111111111111111111111111111111111111111111111111111111111111 0000FF80: 1111111111111111111111111111111111111111111111111111111111111111 0000FFC0: 1111111111111111111111111111111111111111111111111111111111111111 00200000: 11111111-------------------------------------------------------- 00300000: 11111111111111--------------------------------------------------
|
| Чет Юли 28, 2016 3:20 pm |
|
 |
|
slav4o.com
Ранг: Форумен бог
Регистриран на: Нед Яну 01, 2012 8:04 pm Мнения: 2663 Местоположение: София / Велико Търново
|
 Re: XC8 пълни флаш-а наобратно отдолу нагоре
Ми по принцип е така. То май и на старите компилатори пълни отдолу нагоре. Но доколкото съм забелязал F-овете се прескачат бързо. И ми се струва че проблема е някъде другаде. Имаше опция "Fast Programming" поне при PICkit2. И какъв е този пик, толкова ли флаш има ? Със XC8 се пише за 16ки и 18ки както казаха. Де се вика и на бавна скорост трябва да се пълни отгоре до долу доста по-бързо.
|
| Пет Юли 29, 2016 4:21 pm |
|
 |
|
ferdok9
Ранг: Минаващ
Регистриран на: Пет Юли 08, 2011 4:59 pm Мнения: 17
|
 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--------------------------------------------------
|
| Нед Сеп 18, 2016 11:24 pm |
|
|