Перейти к содержанию
    

printf вешает контроллер STM32L471 намертво

Keil5. Копнул дебуггером насколько хватило знаний. И дело не в обращении к функции - дело даже в том, что если в коде присутствует хоть один printf, при старте процессор вообще не переходит в __main. 

Выполняется код:

                 LDR     R0, =SystemInit
                 BLX     R0
                 LDR     R0, =__main
                 BX      R0

И на выполнении BX R0 система улетает куда - то вкачель. Хотя сам R0 содержит тот же адрес 0x08000189. Закипел. Готов уже по всему коду заменить на sprintf. Вот он то работает. Может кто знает в чем грабли?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

4 minutes ago, Димон Безпарольный said:

Может кто знает в чем грабли?

Куча настроена ?

Как альтернатива, использовать xprintf от Чена.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 minute ago, dimka76 said:

Куча настроена ?

Да. И стек увеличен.

Heap_Size      EQU     0xA000

Stack_Size        EQU     0x400

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

9 minutes ago, Arlleex said:

Semihosting?

Помнится добавлял #pragma import(__use_no_semihosting_swi)

Но здесь ругается

Quote

..\BIN\Vagon.axf: Error: L6915E: Library reports error: __use_no_semihosting_swi was requested, but _sys_exit was referenced
..\BIN\Vagon.axf: Error: L6915E: Library reports error: __use_no_semihosting_swi was requested, but _sys_open was referenced
..\BIN\Vagon.axf: Error: L6915E: Library reports error: __use_no_semihosting_swi was requested, but _ttywrch was referenced

Semihosting is not supported by µVision. Thus, you cannot use semihosting SWI operations. In case you have to write your own retarget code, ensure that no semihosting functions of the C library get linked into your application. This is done by importing the symbol __use_no_semihosting_swi. This can be done in any C or assembler source file in your project. In a C module, use the #pragma directive:

Semihosting is not supported by µVision. Thus, you cannot use semihosting SWI operations. In case you have to write your own retarget code, ensure that no semihosting functions of the C library get linked into your application. This is done by importing the symbol __use_no_semihosting_swi. This can be done in any C or assembler source file in your project. In a C module, use the #pragma directive:

 

Изменено пользователем Димон Безпарольный

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

47 minutes ago, Димон Безпарольный said:

И на выполнении BX R0 система улетает куда - то вкачель. Хотя сам R0 содержит тот же адрес 0x08000189.

Сравните код, в который уходит по BX R0 при наличии printf и без него. Возможно, printf тянет за собой какую-то библиотеку с выводом на консоль, а эта библиотека не под Вашу систему. Или просто надо определить какую-то функцию вывода байта в консоль самостоятельно, вот и падает на заглушке.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 minutes ago, aaarrr said:

1. Посмотреть map

2. Пройти __main в пошаговом режиме

В том то и дело что в пошаговом режиме после команды BX R0 как я выше писал дебуггер вылетает вкачель - запускается сам.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 minute ago, Димон Безпарольный said:

В том то и дело что в пошаговом режиме после команды BX R0 как я выше писал дебуггер вылетает вкачель - запускается сам.

а что записано по адресу 0x08000188?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

7 minutes ago, Димон Безпарольный said:

В том то и дело что в пошаговом режиме после команды BX R0 как я выше писал дебуггер вылетает вкачель - запускается сам.

Окошко с дизассемблером попробуйте открыть вместо исходника.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

18 minutes ago, novikovfb said:

а что записано по адресу 0x08000188?

Адреса 189 нет в обоих вариантах - рабочем(когда код printf не компилируется) и не рабочем. По адресу 0x08000188 записано 0x08000188 F000F802  BL.W          __scatterload (0x08000190)F1C4)(0x08001522). Но в R0 грузится 189 адрес.

22 minutes ago, aaarrr said:

Окошко с дизассемблером попробуйте открыть вместо исходника.

Screenshot_1.thumb.png.9cd641d412de68934ff9ae5ef98b9c4e.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

16 minutes ago, Димон Безпарольный said:

Но в R0 грузится 189 адрес

Так мы в thumb'е, что ему еще грузить?

 

1 hour ago, Димон Безпарольный said:

система улетает куда - то вкачель

А конкретнее? Левый адрес, HF?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

наверняка с памятью проблемы (не хватает стека), принтф может и десяток кил RAM съесть. Или вообще просто совпадение и printf() не виноват. Я бы так сделал:

1) на место printf() поставить функцию-заглушку и убедится что оно работает

2) добавить минимальный printf(" ");  Если не работает- то проверять опять выделение памяти и настройки компилятора и линкера.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 минуту назад, Ruslan1 сказал:

принтф может и десяток кил RAM съесть.

Да ну?! Пруфы привести можете?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Just now, jcxz said:

Да ну?! Пруфы привести можете?

прямо сейчас нет. А вообще да, смогу, когда буду компилить чего-нить- с printf() и без него.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...