Кто любит RISC в жизни, заходим, не стесняемся.
Ответить

Keil uVision

Пн мар 19, 2018 11:53:11

Решил слегка погрызть 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 
МАП файл говорит что
Код:
foo                                      0x08001001   Thumb Code    20  foo.o(ZZZ)

Вроде где-то там где надо, опять непонятно почему нечетное значение. Однако если поглядеть 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

Тоже в своё время разобраться толком не получилось. Поэтому чтобы не наплодить странных ошибок воспользовался меню проекта Target и прописал адрес секции IROM2.

Re: Keil uVision

Вт мар 20, 2018 08:23:36

Ладно. Тему запостил. Может кто будет разбираться чего дополнит. В целом на будущий проект скорее всего я с компоновщиком разберусь худо-бедно, так как хоть точно и не понял что сделал, но удалось удачно разместить и функцию и данные в требуемую область памяти. При том что как и отдельно, так и целый объектный файл, без ворнингов.

Я что Keil то изучаю. Есть задумка на новый проект. До этого в Кокосе сидел. Хоть его все и хаят, но не такой он уж и ужасный. Как то все баги Кокоса оказались моими :)) , кроме двух мелочей (может конечно еще что есть). Запускается долго, да, но потом робит хорошо. Keil уже пару раз зависал за теже пару дней (не ломанный), Кокос тоже пару раз, но за больше чем год. Я бы на нем и остался, но проект то Кокосовский заглох давно и не развивается.

Еще вопрос по Keil. В окне watch переменным отображаются только значение и тип, но без адреса. Как то можно это настроить? Что то я не видел, хотя поди где-то это перед носом как всегда.

Re: Keil uVision

Вт мар 20, 2018 11:03:40

Вроде где-то там где надо, опять непонятно почему нечетное значение.
если не ошибаюсь - нечетное, т.к режим Thumb

Re: Keil uVision

Вт мар 20, 2018 15:14:09

Z_h_e писал(а):Запускается долго
По той же причине отказался от кокоса и перешел на EmBitz.

Re: Keil uVision

Чт май 03, 2018 17:43:35

Вернулся я к KEIL, после паузы.

Вопрос теперь у меня про русские буквы. Установил некую лечилку, стал понимать русскую клаву.
Но пишет хрен знает в какой кодировке, вот например русская копипаста из Кейла
Ïðèâåò èç Êåéëà

В кейле то нормально отображается.

С помощью онлайн сервисов смог этот текст увидеть нормально. При том что один сервис написал что была кодировка W-1252, другой ISO8859-1 .

Попробовал отобразить этот текст в NotePad++ в этих кодировках, он быстро и весело перевел кракозябры в иероглифы.
Ладно, типа хрен с ним, если понадобится выдернуть из кейла кирилицу вроде на сайтах можно сделать.

А вот попытался из кокоса как-то вставить куски кода, ну никак не могу подобрать код. Там вроде как UTF, а во что перекодировать то???

----------
З.Ы. Возможно я ничего не понимаю в колбасных обрезках, но пока что-то Кейл меня слегка подбешивает.

Re: Keil uVision

Сб май 05, 2018 18:35:06

Что, никто не решал вопрос переноса кириллицы "туда и обратно"?

У меня еще вопрос. Я не нашел как сгенерить бинарник, только хекс. Не могЁт это Кеил, да?

Re: Keil uVision

Сб май 05, 2018 20:15:34

Конвертировать хекс в бин утилитой hex2bin http://gnuwin32.sourceforge.net/packages/hex2bin.htm

Re: Keil uVision

Сб май 05, 2018 20:33:33

Ну я не это спрашивал же

Добавлено after 50 seconds:
По-ходу он все-таки не умеет, настроек я таких не нашел или слепой я просто.

Re: Keil uVision

Сб май 05, 2018 23:23:01

По-ходу он все-таки не умеет, настроек я таких не нашел или слепой я просто.

Неопытный. :-P
Решается за 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

Дружеский пинок в нужном направлении - вещь незаменимая. Сразу нашел где что почитать. Банарник получен.
:beer:

Добавлено after 14 minutes 40 seconds:
Надо будет потом еще попробовать как сгенерится, если прошивка будет не сначала, пустое место перед прошивкой чем забъет. Но это мелочь, так, потом попробую.

Re: Keil uVision

Вт май 08, 2018 14:20:45

Что, никто не решал вопрос переноса кириллицы "туда и обратно"?

http://www.keil.com/support/docs/3878.htm

ЗЫ
Z_h_e писал(а):Я бы на нем и остался, но проект то Кокосовский заглох давно и не развивается.

CooCox CoIDE - обработанный напильником Eclipse CDT, серьезно. В эту сторону не смотрели?

Re: Keil uVision

Вт май 08, 2018 14:28:29

Чуть позже ссылку гляну, спасибо.
arkhnchul писал(а):CooCox CoIDE - обработанный напильником Eclipse CDT, серьезно. В эту сторону не смотрели?
Да можно и в эту сторону глянуть, на все времени не хватает сразу. В принципе и Кокоса хватает пока. Кеил так, на будущее чтоли, "мигаю светодиодом".

Re: Keil uVision

Вт май 08, 2018 23:57:24

Радикально не рекомендую разбираться с кейловским синтаксисом, это 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

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

Соглашусь за GNU, скрипты линкера интуитивно понятные.

у Кейлового компилятора от 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

Не все так просто. Это то я пробовал. Нюанс в том, что если переключить кодировку в UTF или Russian Win, действительно копипаста нормально работает. Но перестает понимать русскую клаву, переключаешь в ansi, клава работает, ранее вставленная русская копипаста окракозябривается

странно. Вот только поставил в виртуалку скачанный с офсайта mdk, выставил кодировку в utf8 - все работает, и ввод и копипаста. Винда, случаем, не XP еще?)

Re: Keil uVision

Ср май 09, 2018 17:57:59

arkhnchul писал(а):странно. Вот только поставил в виртуалку скачанный с офсайта mdk, выставил кодировку в utf8 - все работает
Win7 у меня.

Как уже писал, надо попробовать переустановить. Но не сейчас.

Re: Keil uVision

Чт май 10, 2018 15:37:49

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

Re: Keil uVision

Вт май 15, 2018 16:55:27

Да можно и в эту сторону глянуть, на все времени не хватает сразу

кстати, как-то упустил момент - в этом году ST то ли купили, то ли как-то договорились с Atollic, и TrueStudio для stm32 стал свободным. Тот же допиленный из коробки eclipse плюс gcc.
Последний раз редактировалось arkhnchul Вт май 15, 2018 16:57:22, всего редактировалось 1 раз.
Ответить