Димон Безпарольный 0 Posted January 25 · Report post Keil5. Копнул дебуггером насколько хватило знаний. И дело не в обращении к функции - дело даже в том, что если в коде присутствует хоть один printf, при старте процессор вообще не переходит в __main. Выполняется код: LDR R0, =SystemInit BLX R0 LDR R0, =__main BX R0 И на выполнении BX R0 система улетает куда - то вкачель. Хотя сам R0 содержит тот же адрес 0x08000189. Закипел. Готов уже по всему коду заменить на sprintf. Вот он то работает. Может кто знает в чем грабли? Quote Ответить с цитированием Share this post Link to post Share on other sites
dimka76 0 Posted January 25 · Report post 4 minutes ago, Димон Безпарольный said: Может кто знает в чем грабли? Куча настроена ? Как альтернатива, использовать xprintf от Чена. Quote Ответить с цитированием Share this post Link to post Share on other sites
Димон Безпарольный 0 Posted January 25 · Report post 1 minute ago, dimka76 said: Куча настроена ? Да. И стек увеличен. Heap_Size EQU 0xA000 Stack_Size EQU 0x400 Quote Ответить с цитированием Share this post Link to post Share on other sites
Arlleex 0 Posted January 25 · Report post Semihosting? Quote Ответить с цитированием Share this post Link to post Share on other sites
Димон Безпарольный 0 Posted January 25 (edited) · Report post 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: Edited January 25 by Димон Безпарольный Quote Ответить с цитированием Share this post Link to post Share on other sites
aaarrr 0 Posted January 25 · Report post 1. Посмотреть map 2. Пройти __main в пошаговом режиме Quote Ответить с цитированием Share this post Link to post Share on other sites
novikovfb 0 Posted January 25 · Report post 47 minutes ago, Димон Безпарольный said: И на выполнении BX R0 система улетает куда - то вкачель. Хотя сам R0 содержит тот же адрес 0x08000189. Сравните код, в который уходит по BX R0 при наличии printf и без него. Возможно, printf тянет за собой какую-то библиотеку с выводом на консоль, а эта библиотека не под Вашу систему. Или просто надо определить какую-то функцию вывода байта в консоль самостоятельно, вот и падает на заглушке. Quote Ответить с цитированием Share this post Link to post Share on other sites
Димон Безпарольный 0 Posted January 25 · Report post 2 minutes ago, aaarrr said: 1. Посмотреть map 2. Пройти __main в пошаговом режиме В том то и дело что в пошаговом режиме после команды BX R0 как я выше писал дебуггер вылетает вкачель - запускается сам. Quote Ответить с цитированием Share this post Link to post Share on other sites
novikovfb 0 Posted January 25 · Report post 1 minute ago, Димон Безпарольный said: В том то и дело что в пошаговом режиме после команды BX R0 как я выше писал дебуггер вылетает вкачель - запускается сам. а что записано по адресу 0x08000188? Quote Ответить с цитированием Share this post Link to post Share on other sites
aaarrr 0 Posted January 25 · Report post 7 minutes ago, Димон Безпарольный said: В том то и дело что в пошаговом режиме после команды BX R0 как я выше писал дебуггер вылетает вкачель - запускается сам. Окошко с дизассемблером попробуйте открыть вместо исходника. Quote Ответить с цитированием Share this post Link to post Share on other sites
Димон Безпарольный 0 Posted January 25 · Report post 18 minutes ago, novikovfb said: а что записано по адресу 0x08000188? Адреса 189 нет в обоих вариантах - рабочем(когда код printf не компилируется) и не рабочем. По адресу 0x08000188 записано 0x08000188 F000F802 BL.W __scatterload (0x08000190)F1C4)(0x08001522). Но в R0 грузится 189 адрес. 22 minutes ago, aaarrr said: Окошко с дизассемблером попробуйте открыть вместо исходника. Quote Ответить с цитированием Share this post Link to post Share on other sites
aaarrr 0 Posted January 25 · Report post 16 minutes ago, Димон Безпарольный said: Но в R0 грузится 189 адрес Так мы в thumb'е, что ему еще грузить? 1 hour ago, Димон Безпарольный said: система улетает куда - то вкачель А конкретнее? Левый адрес, HF? Quote Ответить с цитированием Share this post Link to post Share on other sites
Ruslan1 0 Posted January 25 · Report post наверняка с памятью проблемы (не хватает стека), принтф может и десяток кил RAM съесть. Или вообще просто совпадение и printf() не виноват. Я бы так сделал: 1) на место printf() поставить функцию-заглушку и убедится что оно работает 2) добавить минимальный printf(" "); Если не работает- то проверять опять выделение памяти и настройки компилятора и линкера. Quote Ответить с цитированием Share this post Link to post Share on other sites
jcxz 0 Posted January 25 · Report post 1 минуту назад, Ruslan1 сказал: принтф может и десяток кил RAM съесть. Да ну?! Пруфы привести можете? Quote Ответить с цитированием Share this post Link to post Share on other sites
Ruslan1 0 Posted January 25 · Report post Just now, jcxz said: Да ну?! Пруфы привести можете? прямо сейчас нет. А вообще да, смогу, когда буду компилить чего-нить- с printf() и без него. Quote Ответить с цитированием Share this post Link to post Share on other sites