jcxz 243 25 января, 2022 Опубликовано 25 января, 2022 · Жалоба 10 минут назад, Ruslan1 сказал: прямо сейчас нет. А вообще да, смогу, когда буду компилить чего-нить- с printf() и без него. Приведите обязательно. И компилятор укажите. И выбранный вариант stdlib-а. А то у меня куча проектов, везде printf() и нигде нет стеков больше пары КБ. И....... ничего Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 189 25 января, 2022 Опубликовано 25 января, 2022 · Жалоба 1 час назад, Димон Безпарольный сказал: Помнится добавлял... Галка Use MicroLIB - что с ней (установлена, нет?). Цитата Но здесь ругается... Конечно ругается - те функции нужно определить где-то. 1. Создайте файл (имя любое).c - в него включите содержимое Скрытый текст #include <time.h> #include <rt_sys.h> #include <rt_misc.h> __asm(".global __ARM_use_no_argv"); __asm(".global __use_no_semihosting"); const char __stdin_name[] = ":tt"; const char __stdout_name[] = ":tt"; const char __stderr_name[] = ":tt"; FILEHANDLE _sys_open(const char *name, int mode) { return 1; } int _sys_close(FILEHANDLE file) { return 0; } char *_sys_command_string(char *cmd, int len) { return NULL; } int _sys_write(FILEHANDLE file, const unsigned char *buf, unsigned len, int mode) { return 0; } int _sys_read(FILEHANDLE file, unsigned char *buf, unsigned len, int mode) { return -1; } void _ttywrch(int ch) { } int _sys_istty(FILEHANDLE file) { return 0; } int _sys_seek(FILEHANDLE file, long pos) { return -1; } long _sys_flen(FILEHANDLE file) { return -1; } void _sys_exit(int retval) { while(1); } clock_t clock(void) { return 0; } void _clock_init(void) { } time_t time(time_t *tmr) { return 0; } int system(const char *str) { return 0; } char *getenv(const char *name) { return NULL; } void _getenv_init(void) { } 2. Уберите в настройках проекта галку Use MicroLIB. 3. Стек - на Ваше усмотрение, размер кучи в startup можно установить в 0. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
novikovfb 19 25 января, 2022 Опубликовано 25 января, 2022 · Жалоба 36 minutes ago, Димон Безпарольный said: Адреса 189 нет в обоих вариантах - рабочем(когда код printf не компилируется) и не рабочем. По адресу 0x08000188 записано 0x08000188 F000F802 BL.W __scatterload (0x08000190)F1C4)(0x08001522). Но в R0 грузится 189 адрес. Насколько я понимаю, этот процессор может работать только в thumb режиме, а команда BL.W - 32-разрядная, т.е. не реализована в процессоре. Скорее всего, при подключении printf подключается библиотека от другого процессора. Смотрите настройки линкера (должно быть -mthumb). Сравните с кодом по адресу 0x08000188 в программе без printf Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Димон Безпарольный 2 25 января, 2022 Опубликовано 25 января, 2022 · Жалоба 21 minutes ago, aaarrr said: Так мы в thumb'е, что ему еще грузить? А конкретнее? Левый адрес, HF? Не могу сказать потому что при шаге на BX R0 (F11, one step), дебуггер сам запускается. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 189 25 января, 2022 Опубликовано 25 января, 2022 · Жалоба 3 минуты назад, novikovfb сказал: Насколько я понимаю... Плохо понимаете Thumb(-2) - это не только 16-битные инструкции. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Димон Безпарольный 2 25 января, 2022 Опубликовано 25 января, 2022 · Жалоба 5 minutes ago, novikovfb said: -mthumb Линкер ругается на такой ключ ..\BIN\Vagon.axf: error: L3900U: Unrecognized option '-mthumb'. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 243 25 января, 2022 Опубликовано 25 января, 2022 · Жалоба 7 минут назад, novikovfb сказал: Насколько я понимаю, этот процессор может работать только в thumb режиме, а команда BL.W - 32-разрядная, т.е. не реализована в процессоре. Ну вообще-то не Thumb, а Thumb-2. Почитайте что это такое и почувствуйте разницу: https://ru.wikipedia.org/wiki/ARM_(архитектура)#Набор_команд_Thumb-2 И 32-битных инструкций в Thumb-2 полно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 25 января, 2022 Опубликовано 25 января, 2022 · Жалоба 5 minutes ago, Димон Безпарольный said: Не могу сказать потому что при шаге на BX R0 (F11, one step), дебуггер сам запускается. И кнопки "Stop" у него нет? В disassembly есть возможность breakpoint поставить? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Ruslan1 17 25 января, 2022 Опубликовано 25 января, 2022 · Жалоба 4 minutes ago, jcxz said: Приведите обязательно. И компилятор укажите. И выбранный вариант stdlib-а. А то у меня куча проектов, везде printf() и нигде нет стеков больше пары КБ. И....... ничего Ну, может и пара килобайт. Специально извращаться не буду, проще согласиться что преувеличил чуток :). У меня эти printf-vsnprintf-snprintf разные есть, может и на них попадал, а не на простом printf. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 243 25 января, 2022 Опубликовано 25 января, 2022 · Жалоба 5 минут назад, Ruslan1 сказал: Ну, может и пара килобайт. Специально извращаться не буду, проще согласиться что преувеличил чуток :). У меня эти printf-vsnprintf-snprintf разные есть, может и на них попадал, а не на простом printf. "пара КБ" - это весь стек. Естественно сам по себе printf() использует намного меньше. На IAR-овской библиотеке ни разу даже полкилобайта не видел. Обычно = вроде ~256 байт максимум. PS: Да, если точнее - всегда использую не сами printf()/sprintf() и прочие производные, а корневую extern "C" int _Printf(void *(*)(void *, int), void *, const char *, va_list *); Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Димон Безпарольный 2 25 января, 2022 Опубликовано 25 января, 2022 · Жалоба 11 minutes ago, aaarrr said: И кнопки "Stop" у него нет? В disassembly есть возможность breakpoint поставить? Наверно не совем понимаю - stop есть, но когда нажимаешь проц уже на каких - то адресах левых. Beak тоже непонятно на какой адрес ставить. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 25 января, 2022 Опубликовано 25 января, 2022 · Жалоба 21 minutes ago, Димон Безпарольный said: Наверно не совем понимаю - stop есть, но когда нажимаешь проц уже на каких - то адресах левых. На каких именно? Что он выполняет? 21 minutes ago, Димон Безпарольный said: Beak тоже непонятно на какой адрес ставить. 0x08000188 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 189 25 января, 2022 Опубликовано 25 января, 2022 · Жалоба Проект лучше сюда скиньте голый, без других исходников - но достаточный, чтобы воссоздать проблему. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Димон Безпарольный 2 25 января, 2022 Опубликовано 25 января, 2022 · Жалоба 14 minutes ago, Arlleex said: Проект лучше сюда скиньте голый, без других исходников - но достаточный, чтобы воссоздать проблему. Проект доступен по ссылке https://cloud.mail.ru/public/6mLD/bh6UcxUQY 9 мБ. Раскоментируйте строку 138 Main и получите описанный глюк. //if(ComSwitch == 15) {printf("Ready\r");} Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 189 25 января, 2022 Опубликовано 25 января, 2022 · Жалоба Расскомментировал, собрал, удалив отсутствующие файлы в проекте, под симулятором управление переходит в main(). Однако, что кидается в глаза - остатки semihoshing-а видны: BKPT в __main() на системных вызовах. Галку Use MicroLIB поставьте. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться