Страница 1 из 3
Keil uVision
Добавлено: Пн мар 19, 2018 11:53:11
Z_h_e
Решил слегка погрызть Keil. Вопрос у меня по компоновщику. В голове в основном каша, при чем не вареная, но постараюсь задать более-менее осмысленный вопрос.
Есть некая функция
foo,постоянно вызывается в основном цикле, надо ее разместить в некой другой области памяти. Функция ничего полезного не делает, изучаю компоновщик.
Спойлер
Код: Выделить всё
uint16_t foo (uint16_t n) __attribute__((section("ZZZ")));
uint16_t foo (uint16_t n)
{
.....
}
Если сделать вот такой scatter,
Спойлер
Код: Выделить всё
LR_IROM1 0x08000000 0x00010000 { ; load region size_region
ER_IROM1 0x08000000 0x00001000 { ; load address = execution address
*.o (RESET, +First)
*(InRoot$$Sections)
.ANY (+RO)
.ANY (+XO)
}
;---------------------------------------------------------------------------------------------
ER_IROM2 0x08001000 0x00000500 { ; load address = execution address
.ANY (+RO,ZZZ)
}
RW_IRAM1 0x20000000 0x00005000 { ; RW data
.ANY (+RW +ZI)
}
}
проект компиллится без ерроров и варнингов,
Код: Выделить всё
Program Size: Code=684 RO-data=272 RW-data=0 ZI-data=1640
МАП файл говорит что
Вроде где-то там где надо, опять непонятно почему нечетное значение. Однако если поглядеть HEX, в этой области ничего нет. Если запустить прошивку, прога уходит в исключение где-то на этапе выполнения стартапа.
Если написать вот такой scatter
Спойлер
Код: Выделить всё
LR_IROM1 0x08000000 0x00010000 { ; load region size_region
ER_IROM1 0x08000000 0x00001000 { ; load address = execution address
*.o (RESET, +First)
*(InRoot$$Sections)
.ANY (+RO)
.ANY (+XO)
}
RW_IRAM1 0x20000000 0x00005000 { ; RW data
.ANY (+RW +ZI)
}
}
;======================
LR_IROM2 0x08001000 0x00000500 {
ER_IROM2 0x08001000 0x00000500 { ; load address = execution address
.ANY (+RO,ZZZ)
;foo.o(+RO)
}
}
Мап файл пишет тоже самое, по крайней мере про размещение foo. Компиллится чуток с другими цифирями
Код: Выделить всё
Program Size: Code=656 RO-data=256 RW-data=0 ZI-data=1640
Но в этом случае код уже работает, функция на самом деле лежит где надо (0x08001000), проверил в дебаге и поглядел HEX. Оптимизация в обоих случаях выключена.
Почитал Хелп как смог:), форумы буржуйские, но к сожалению знания аглицкого бедные для четкого понимания написанного. Русского по компоновщику кейла, можно сказать, ничего не нашел.
Теперь попробую задать вопрос, боюсь что очень колхозно и вряд ли с правильными терминами, пока можно сказать ничего не понял.
В первом скаттере есть регион
LR_IROM1, в нем три как бы подрегиона(не знаю как правильно назвать)
ER_IROM1,ER_IROM2, RW_IRAM1.. В
ER_IROM2 определена секция
ZZZ. Но не хрена не работает так.
А если я эту секцию указываю таком же в подрегионе, но уже в отдельном новом регионе, то тогда работает.
1. Я хоть приблизительно на верном пути с пониманием линковщика Кейла с регионами и "подрегионами"?
2. В чем разница между скаттерами?
Re: Keil uVision
Добавлено: Пн мар 19, 2018 17:23:40
uk8amk
Тоже в своё время разобраться толком не получилось. Поэтому чтобы не наплодить странных ошибок воспользовался меню проекта Target и прописал адрес секции IROM2.
Re: Keil uVision
Добавлено: Вт мар 20, 2018 08:23:36
Z_h_e
Ладно. Тему запостил. Может кто будет разбираться чего дополнит. В целом на будущий проект скорее всего я с компоновщиком разберусь худо-бедно, так как хоть точно и не понял что сделал, но удалось удачно разместить и функцию и данные в требуемую область памяти. При том что как и отдельно, так и целый объектный файл, без ворнингов.
Я что Keil то изучаю. Есть задумка на новый проект. До этого в Кокосе сидел. Хоть его все и хаят, но не такой он уж и ужасный. Как то все баги Кокоса оказались моими

, кроме двух мелочей (может конечно еще что есть). Запускается долго, да, но потом робит хорошо. Keil уже пару раз зависал за теже пару дней (не ломанный), Кокос тоже пару раз, но за больше чем год. Я бы на нем и остался, но проект то Кокосовский заглох давно и не развивается.
Еще вопрос по Keil. В окне watch переменным отображаются только значение и тип, но без адреса. Как то можно это настроить? Что то я не видел, хотя поди где-то это перед носом как всегда.
Re: Keil uVision
Добавлено: Вт мар 20, 2018 11:03:40
city77
Вроде где-то там где надо, опять непонятно почему нечетное значение.
если не ошибаюсь - нечетное, т.к режим Thumb
Re: Keil uVision
Добавлено: Вт мар 20, 2018 15:14:09
Мурик
Z_h_e писал(а):Запускается долго
По той же причине отказался от кокоса и перешел на
EmBitz.
Re: Keil uVision
Добавлено: Чт май 03, 2018 17:43:35
Z_h_e
Вернулся я к KEIL, после паузы.
Вопрос теперь у меня про русские буквы. Установил некую лечилку, стал понимать русскую клаву.
Но пишет хрен знает в какой кодировке, вот например русская копипаста из Кейла
Ïðèâåò èç Êåéëà
В кейле то нормально отображается.
С помощью онлайн сервисов смог этот текст увидеть нормально. При том что один сервис написал что была кодировка W-1252, другой ISO8859-1 .
Попробовал отобразить этот текст в NotePad++ в этих кодировках, он быстро и весело перевел кракозябры в иероглифы.
Ладно, типа хрен с ним, если понадобится выдернуть из кейла кирилицу вроде на сайтах можно сделать.
А вот попытался из кокоса как-то вставить куски кода, ну никак не могу подобрать код. Там вроде как UTF, а во что перекодировать то???
-----------
З.Ы. Возможно я ничего не понимаю в колбасных обрезках, но пока что-то Кейл меня слегка подбешивает.
Re: Keil uVision
Добавлено: Сб май 05, 2018 18:35:06
Z_h_e
Что, никто не решал вопрос переноса кириллицы "туда и обратно"?
У меня еще вопрос. Я не нашел как сгенерить бинарник, только хекс. Не могЁт это Кеил, да?
Re: Keil uVision
Добавлено: Сб май 05, 2018 20:15:34
Myp3ik
Re: Keil uVision
Добавлено: Сб май 05, 2018 20:33:33
Z_h_e
Ну я не это спрашивал же
Добавлено after 50 seconds:
По-ходу он все-таки не умеет, настроек я таких не нашел или слепой я просто.
Re: Keil uVision
Добавлено: Сб май 05, 2018 23:23:01
Siarzhuk
[uquote="Z_h_e",url="/forum/viewtopic.php?p=3369997#p3369997"]По-ходу он все-таки не умеет, настроек я таких не нашел или слепой я просто.[/uquote]
Неопытный.

Решается за 7 минут: а) Видим в настройках, что генерация HEX - это опция, значит основной target - нечто другое. б) Находим это нечто другое (.axf) и по сигнатуре ELF в начале файла и массе отладочной информации смекаем, что это не для образа, а для отладчика. ц) Соображаем, что требуемая манипуляция - дело скорее тулчейна, чем самой ИДЕ - бежим к нему в папочку и обнаруживаем там то, что и надеялись обнаружить - fromelf.exe. д) запускаем его в консоли - осознаём свою победищу, кричим ура, настраиваем вызов в user послебилд примерно так:
fromelf.exe --bin --output .\Release.DAD61L\DAD61L.bin .\Release.DAD61L\DAD61L.axf
е) пересобираем проект и убеждаемся в идентичности хекс-дампа bin-файла HEX-у. ф) Самодовольно пишем этот издевательский пост на коте.

Re: Keil uVision
Добавлено: Вс май 06, 2018 09:42:10
Z_h_e
Дружеский пинок в нужном направлении - вещь незаменимая.
Сразу нашел где что почитать. Банарник получен.
Добавлено after 14 minutes 40 seconds:
Надо будет потом еще попробовать как сгенерится, если прошивка будет не сначала, пустое место перед прошивкой чем забъет. Но это мелочь, так, потом попробую.
Re: Keil uVision
Добавлено: Вт май 08, 2018 14:20:45
arkhnchul
[uquote="Z_h_e",url="/forum/viewtopic.php?p=3369884#p3369884"]Что, никто не решал вопрос переноса кириллицы "туда и обратно"?[/uquote]
http://www.keil.com/support/docs/3878.htm
ЗЫ
Z_h_e писал(а):Я бы на нем и остался, но проект то Кокосовский заглох давно и не развивается.
CooCox CoIDE - обработанный напильником Eclipse CDT, серьезно. В эту сторону не смотрели?
Re: Keil uVision
Добавлено: Вт май 08, 2018 14:28:29
Z_h_e
Чуть позже ссылку гляну, спасибо.
arkhnchul писал(а):CooCox CoIDE - обработанный напильником Eclipse CDT, серьезно. В эту сторону не смотрели?
Да можно и в эту сторону глянуть, на все времени не хватает сразу. В принципе и Кокоса хватает пока. Кеил так, на будущее чтоли, "мигаю светодиодом".
Re: Keil uVision
Добавлено: Вт май 08, 2018 23:57:24
Shapa
Радикально не рекомендую разбираться с кейловским синтаксисом, это corner-case. Выучте и больше нигде не применете. Иное дело GNU ld, его скипты везде (кроме винды конечно же). В целом - концепция едина, но отличается реализация и всякие мелочи
http://www.slac.stanford.edu/comp/unix/ ... ripts.html
Но всё же GNU ld куда больше распространен и ответы на свои вопросы вы найдете на stackoverflow, а с кейлом. скорее всего придется всё самому
PS: сама по себе IDE не важна, важен toolchain. Кокос использует gcc, кейл - свою проприретарщину
Re: Keil uVision
Добавлено: Ср май 09, 2018 05:56:14
Z_h_e
arkhnchul писал(а):http://www.keil.com/support/docs/3878.htm
Не все так просто. Это то я пробовал. Нюанс в том, что если переключить кодировку в UTF или Russian Win, действительно копипаста нормально работает. Но перестает понимать русскую клаву, переключаешь в ansi, клава работает, ранее вставленная русская копипаста окракозябривается.
Возможно я сделал ошибку при установке. Я качал с рутрекера, там был где-то пост , что русский понимать не будет и надо установить лечилку клавы. Я увидел что это действительно так (не пооигравшись с кодировками) и ее установил, а может зря.
Потом попробую снести и заново установлю без лечилки клавы, отпишусь по этому поводу.
Shapa писал(а):Но всё же GNU ld куда больше распространен и ответы на свои вопросы вы найдете на stackoverflow, а с кейлом. скорее всего придется всё самому
Соглашусь за GNU, скрипты линкера интуитивно понятные, может не все сразу понятно, но достаточно, даже методом осмысленного тыка уговорить линкер сделать то что хочешь.
На Кеил много хорошего слышал, на первые впечатления пока стараюсь не смотреть, бывают обманчивые.
Re: Keil uVision
Добавлено: Ср май 09, 2018 08:45:08
oleg110592
[uquote="Z_h_e",url="/forum/viewtopic.php?p=3372358#p3372358"]Соглашусь за GNU, скрипты линкера интуитивно понятные.[/uquote]
у Кейлового компилятора от ARM тоже есть похожий скрипт линкера, sct файл, типа:
Спойлер
Код: Выделить всё
; *************************************************************
; *** Scatter-Loading Description File for STM32F103x6 ***
; org LR_ROM1 0x08000000 0x00008000
; *************************************************************
LR_ROM1 0x0000000 0x00008000
{ ; load region size_region
ER_ROM1 0x0000000 0x00008000
{ ; load address = execution address
*.o (RESET, +First)
*(InRoot$$Sections)
.ANY (+RO)
}
RW_IRAM1 0x20000000 0x00002800
{ ; RW data
.ANY (+RW +ZI)
}
}
и вполне хорошая документация на линкер:
http://www.keil.com/support/man/docs/armlink/
новый компилятор с поддержкой LTO:
http://www2.keil.com/mdk5/compiler/6/
Re: Keil uVision
Добавлено: Ср май 09, 2018 16:50:14
arkhnchul
[uquote="Z_h_e",url="/forum/viewtopic.php?p=3372358#p3372358"]Не все так просто. Это то я пробовал. Нюанс в том, что если переключить кодировку в UTF или Russian Win, действительно копипаста нормально работает. Но перестает понимать русскую клаву, переключаешь в ansi, клава работает, ранее вставленная русская копипаста окракозябривается[/uquote]
странно. Вот только поставил в виртуалку скачанный с офсайта mdk, выставил кодировку в utf8 - все работает, и ввод и копипаста. Винда, случаем, не XP еще?)
Re: Keil uVision
Добавлено: Ср май 09, 2018 17:57:59
Z_h_e
arkhnchul писал(а):странно. Вот только поставил в виртуалку скачанный с офсайта mdk, выставил кодировку в utf8 - все работает
Win7 у меня.
Как уже писал, надо попробовать переустановить. Но не сейчас.
Re: Keil uVision
Добавлено: Чт май 10, 2018 15:37:49
Z_h_e
Переустановка решила проблему со шрифтами.
Re: Keil uVision
Добавлено: Вт май 15, 2018 16:55:27
arkhnchul
[uquote="Z_h_e",url="/forum/viewtopic.php?p=3371863#p3371863"]Да можно и в эту сторону глянуть, на все времени не хватает сразу[/uquote]
кстати, как-то упустил момент - в этом году ST то ли купили, то ли как-то договорились с Atollic, и TrueStudio для stm32 стал свободным. Тот же допиленный из коробки eclipse плюс gcc.