Jump to content

    
Sign in to follow this  
MementoMori

Проблема при старте отладки в Keil

Recommended Posts

9 hours ago, HardEgor said:

H743.sct :

 LR_EROM1 0x90000000 0x2000000  {    ; load region size_region
 ER_EROM1 0x90000000 0x2000000  {  ; load address = execution address

Ну допустим. Но эти строки во первых, необходимы, чтобы линковщик назначил картинки не во внутреннюю флеш контроллера, а в QSPI, иначе, если объем их велик, проект не соберется.

Во-вторых - для F746 камня это проблемой не являлось.

Господа, вы, на мой взгляд, не учли одну вещь - ошибка происходит не при выполнении кода, а при его загрузке. Я ж писал - "loading object code".

ПРичем происходит это на определенном проценте загрузки. И если флеш контроллера 1 МБ, а в ExtFlashSection данных на 4 МБ - то ошибка возникает на 20%, если в ExtFlashSection тоже 1Мб - то на 50% - улавливаете о чем я?

Share this post


Link to post
Share on other sites
3 hours ago, x893 said:

А с JLink такая же проблема ?
Если убрать галку Default около сегмента 0x900 0000 ?

Как выяснилось, у меня старая версия, не подднрживающая h7 серию. Новвй китайский клон я заказал конечно. Но может найдётся на форуме человек, у которого и jlink и плата на н7 и keil..... 

3 hours ago, x893 said:

Если убрать галку Default около сегмента 0x900 0000 ?

Галки не принимаются во внимание, если стоит другая галка, та что предписывпет использовать sct файл

Share this post


Link to post
Share on other sites
2 hours ago, MementoMori said:

Галки не принимаются во внимание, если стоит другая галка, та что предписывпет использовать sct файл

То есть галку на 0х900 0000 убрали и не работает ?

Share this post


Link to post
Share on other sites

Я не вчитывался в предыдущие две страницы, но если правильно понял, то проблема в том, что нужно запретить отладчику читать память по определенным адресам. Попробуйте это: https://wiki.segger.com/Memory_accesses -> Memory access map

Edited by tgruzd

Share this post


Link to post
Share on other sites
2 hours ago, tgruzd said:

Я не вчитывался в предыдущие две страницы, но если правильно понял, то проблема в том, что нужно запретить отладчику читать память по определенным адресам.

Да как бы, знаете ли, хотелось бы читать.

На самом деле нужно настроить сборку проекта так, чтобы загружаемый во время "loading object code" код не содержал в себе секции, которые привязаны к адресу 0x90000000 и выше. Чтобы во время стадии "loading object code" не происходило обращения по указанному адресу.

Share this post


Link to post
Share on other sites
10.02.2021 в 03:30, MementoMori сказал:

Это он пишет потому что в sct файле есть информация о размещении данных в qspi, а алгоритм прошивки для неё не указан. Вот он и прошивается только внутреннюю флеш, а на qspi, ранее прошитое, не тратит времени. Так надо. И это правильно. Это не ощибка

Цитата

Да как бы, знаете ли, хотелось бы читать.

А теперь я прочитал тему и ещё больше не понял.  Получается, вы сознательно убрали алгоритм чтения памяти по адресу 0x9..... . Отладчик туда лезет по каким-то причинам, что закономерно вызывает ошибку. Вы пытаетесь решить вопрос правкой sct файла, что закономерно приводит к расположению данных не туда. Но почему-то не хотите явно запретить отладчику лазить туда, куда он не умеет. Это действительно необходимо - читать картинки и шрифты через отладчик?    

Share this post


Link to post
Share on other sites

 Смотрите, как всё происходит:  

  1. В файле *.FLM содержится исполняемый код (Program algorithm), который размещается в RAM МК:   image.png.96881fc7ef98d0daf5018b0bcc076c65.png  он занимается тем, что пишет и читает данные поступающие от отладчика по jtag или sw. Т.к. память везде разная - внутренняя, внешняя, да любая - то собственно в этом файле  и содержится информация о том, каким образом осуществлять доступ к тому или иному диапазону адресов.  
  2. 17.02.2021 в 11:52, MementoMori сказал:

    а при его загрузке. Я ж писал - "loading object code".

    происходит следующее: отладчик передает микроконтроллеру информацию, что сейчас нужно записать такую-то страницу или хотя бы просто сообщает о факте её существования. Но так как вы сознательно подменили "програм алгоритм", то функции доступа (инициализации) возвращают ошибки для соответствующего диапазона адресов, которые вы и наблюдаете.

     

    17.02.2021 в 11:52, MementoMori сказал:

    И если флеш контроллера 1 МБ, а в ExtFlashSection данных на 4 МБ - то ошибка возникает на 20%, если в ExtFlashSection тоже 1Мб - то на 50% - улавливаете о чем я?

    3. Улавливаем. А теперь ваша очередь оставить попытки править *.sct (зачем? пускай физически у вас всё лежит по правильным адресам), а вместо этого пресечь попытки линка обращаться к адресам, которыми он не может оперировать (не важно почему не может, в общем случае).     

 

Вы также можете не следовать моему первоначальному совету (честно сказать, я так не пробовал делать), а просто написать и скомпилировать свой собственный *.FLM (так пробовал), где-то в недрах кейла даже соответствующий пример есть. 

 

 

 

Edited by tgruzd

Share this post


Link to post
Share on other sites
2 hours ago, tgruzd said:

Получается, вы сознательно убрали алгоритм чтения памяти по адресу 0x9.....

Вы про вкладку "flash Download"? А она как то отвечает за чтение? А по моему за запись и только. 

2 hours ago, tgruzd said:

Вы пытаетесь решить вопрос правкой sct файла, что закономерно приводит к расположению данных не туда

Не не туда, а во внутреннюю флеш и все было бы хорошо, если бы флеш не была столь мала. 

2 hours ago, tgruzd said:

Это действительно необходимо - читать картинки и шрифты через отладчик?    

Как вам сказать... Когда настраивал режимы qspi, то была необходимость. Через окно memory очень легко понять, правильно ли читаются данные. Я писал уже раньше, что перелазию с F746 на Н743, так вот что-то не работает у меня dualflash, не могу понять почему. Окошко мемори пригодилось бы. 

 

2 hours ago, tgruzd said:

Отладчик туда лезет по каким-то причинам, что закономерно вызывает ошибку.

Он по совершенно непонятным причинам лезет туда до запуска кода, на стадии загрузки (не путать с прошиванием) 

Ещё более непонятно, почему этой проблемы не было на F746 камне

8 minutes ago, tgruzd said:

А теперь ваша очередь оставить попытки править *.sct (зачем? пускай физически у вас всё лежит по правильным адресам

Не понимаю. Смотрите, если я прописываю в sct файле ExtFlashSection, то линковка происходит правильно. Всё массивы, содержащие картинки кидаются в секцию, из которой шьётcя qspi. Но при этом проблема при загрузке. 

Если же убрать ExtFlashSection - то линковщик пытается засунуть все во внутреннюю флеш. 

 

У меня мысль появилась интересная - сделать некий костыль. Написать алгоритм прошивания qspi, в котором включается. Memory mapped Mode, но самой прошивки и затраты времени на неё, не происходит. И посмотреть, что будет. По идее контроллер все равно должен ресетнуться, но чем черт не шутит

Share this post


Link to post
Share on other sites
35 минут назад, MementoMori сказал:

Он по совершенно непонятным причинам лезет туда до запуска кода, на стадии загрузки (не путать с прошиванием) 

предположительно, проверяет доступна ли вообще эта память

35 минут назад, MementoMori сказал:

Ещё более непонятно, почему этой проблемы не было на F746 камне

Наверное не в камне дело. Вы ведь память добавили. В *.sct секцию-то прописали, а как же *.FLM об этом узнает?

 

35 минут назад, MementoMori сказал:

Не понимаю. Смотрите, если я прописываю в sct файле ExtFlashSection, то линковка происходит правильно. Всё массивы, содержащие картинки кидаются в секцию, из которой шьётcя qspi. Но при этом проблема при загрузке. 

Если же убрать ExtFlashSection - то линковщик пытается засунуть все во внутреннюю флеш. 

 Тут надо понять, что линковка здесь не причём.  Попробуйте ещё раз внимательно прочитать написанное, потом попробуйте сделать это, а там вдруг и жизнь наладится.

 

35 минут назад, MementoMori сказал:

чем черт не шутит

:diablo:

 

Edited by tgruzd
Прошу прощения, ошибся: *.AXF в моих сообщениях следует читать как *.FLM

Share this post


Link to post
Share on other sites
18 minutes ago, tgruzd said:

Наверное не в камне дело. Вы ведь память добавили. В *.sct секцию-то прописали, а как же *.axf об этом узнает?

Ну когда я создавал в кубе проект под 746 камень, я так же работал с sct файлом. Всё остальное создавал куб и touchgfx designer.  

20 minutes ago, tgruzd said:

Попробуйте ещё раз внимательно прочитать написанное, потом попробуйте сделать это, а там вдруг и жизнь наладится.

Попробую

Share this post


Link to post
Share on other sites
45 минут назад, MementoMori сказал:

Вы про вкладку "flash Download"? А она как то отвечает за чтение? А по моему за запись и только.

Нет, я про другое.   image.thumb.png.29aec9632032ad778677f28413b068aa.png  смотрите столбец address range. ваша память входит в этот диапазон(диапазоны)? полностью? Вот здесь корень ошибки. и просто поменять start и size - не поможет.

Share this post


Link to post
Share on other sites
4 minutes ago, tgruzd said:

смотрите столбец address range. ваша память входит в этот диапазон(диапазоны)? полностью? Вот здесь корень ошибки. и просто поменять start и size - не поможет

Вы про внутреннюю флеш? Или картинка для примера, а вы имеете в виду qspi? 

Share this post


Link to post
Share on other sites
14 минут назад, MementoMori сказал:

Вы про внутреннюю флеш? Или картинка для примера, а вы имеете в виду qspi? 

Картинка для примера. Я про qspi. Это к вопросу о том, почему раньше всё работало.  Эти диапазоны адресов означают, что конкретный алгоритм только этими адресами и оперирует.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this