Arlleex 183 4 июня, 2021 Опубликовано 4 июня, 2021 · Жалоба Ну так ли это сейчас влияет на retarget с его сраным полухостингом... Вряд ли, ИМХО. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 26 4 июня, 2021 Опубликовано 4 июня, 2021 · Жалоба 7 minutes ago, Arlleex said: Ну так ли это сейчас влияет на retarget с его сраным полухостингом... Вряд ли, ИМХО. Вот к чему я все это начал: Не оно? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 183 4 июня, 2021 Опубликовано 4 июня, 2021 · Жалоба Скорее всего, оно. Только вот на что оно влияет в плане исходников - хрен поймешь. Сделал даже как вот тут описано - один фиг не работает, под отладчиком зациклилось в _sys_exit(). В аду отдельный котел для тех, кто сие изобрел. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 4 июня, 2021 Опубликовано 4 июня, 2021 · Жалоба Откажитесь от своего asm стартапа. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 26 4 июня, 2021 Опубликовано 4 июня, 2021 · Жалоба Кстати, а покажите этот самый startup и заодно остальные исходники из этого пустого проекта У меня стартап на плюсах, штатный отключен и все прекрасно работает. Так что ситуация честно говоря странная. Может, проблема с неправильным размером кучи? Она должна быть хотя бы 16 байт если не ошибаюсь. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 183 4 июня, 2021 Опубликовано 4 июня, 2021 · Жалоба 22 минуты назад, Forger сказал: Может, проблема с неправильным размером кучи? Она должна быть хотя бы 16 байт если не ошибаюсь. Только что, шагая под отладчиком, выяснил, что некая __argv_alloc, видимо, пользуется кучей. А она у меня в стартапе 0 задана (не думал я, что штатная библиотека инициализации окружения использует кучу). Поправил на 256 (ради эксперимента) и все заработало. Потом прочел Ваше сообщение. Спасибо, действительно куча должна быть не 0. Меньше 256 байт (но кратно степени двойки), т.е. 128, 64, 32, 16... не хватает, видимо - также __argv_alloc() возвращает 0 и вызывается _sys_exit(). Однако в проекте надо переопределить некоторые функции и вписать в любом исходнике __asm(".global __use_no_semihosting"). Я завел retrg.c Скрытый текст #include <time.h> #include <rt_sys.h> #include <rt_misc.h> __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 openmode) { return 1; } int _sys_close(FILEHANDLE fh) { return 0; } char *_sys_command_string(char *cmd, int len) { return NULL; } int _sys_write(FILEHANDLE fh, const unsigned char *buf, unsigned len, int mode) { return 0; } int _sys_read(FILEHANDLE fh, unsigned char *buf, unsigned len, int mode) { return -1; } void _ttywrch(int ch) { } int _sys_istty(FILEHANDLE fh) { return 0; } int _sys_seek(FILEHANDLE fh, long pos) { return -1; } long _sys_flen(FILEHANDLE fh) { return -1; } void _sys_exit(int return_code) { while(1); } clock_t clock(void) { return 0; } void _clock_init(void) { } time_t time(time_t *timer) { return 0; } int system(const char *string) { return 0; } char *getenv(const char *name) { return NULL; } void _getenv_init(void) { } 31 минуту назад, ViKo сказал: Откажитесь от своего asm стартапа. Не вижу прямой связи и разницы, в чем он написан, для конкретно моего случая. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 26 4 июня, 2021 Опубликовано 4 июня, 2021 · Жалоба У себя в стартапе прописал это: __asm(".global __use_realtime_heap \n\t"); __asm(".global __ARM_use_no_argv \n\t"); __asm(".global __use_two_region_memory \n\t"); Особенно обратите внимание на это: __asm(".global __ARM_use_no_argv \n\t"); 23 minutes ago, Arlleex said: __asm(".global __use_no_semihosting") У меня сразу ругается линкер: Error: L6915E: Library reports error: __use_no_semihosting was requested, but _sys_exit was referenced Error: L6915E: Library reports error: __use_no_semihosting was requested, but _ttywrch was referenced Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 183 4 июня, 2021 Опубликовано 4 июня, 2021 · Жалоба О как, спасибо. А почему у Вас __asm(".global __use_realtime_heap") есть? Стандартной кучей пользуетесь? Глянул Reference Guide на ARM Compiler 6.15 - что-то про __ARM_use_no_argv ничего внятного не нашлось... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 26 4 июня, 2021 Опубликовано 4 июня, 2021 · Жалоба 27 minutes ago, Arlleex said: Я завел retrg.c У меня автоматом подключился: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 183 4 июня, 2021 Опубликовано 4 июня, 2021 · Жалоба 7 минут назад, Forger сказал: У меня сразу ругается линкер... Да, логично, потому что нужно подсунуть свои определения для _sys_command_string(), _ttywrch() и _sys_exit(). 1 минуту назад, Forger сказал: У меня автоматом подключился... А, ну вот. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 26 4 июня, 2021 Опубликовано 4 июня, 2021 · Жалоба 1 minute ago, Arlleex said: Стандартной кучей пользуетесь? Да, но ее RTX использует, в целом мне так даже удобнее получается. Не помню, почему отказался от статического выделения стеков и TCB для задач, но так тоже прекрасно работает. Да и куча используется только на старте приложения, поэтому дефрагментация и тп. ей не грозят в принципе. Just now, Arlleex said: Да, логично, потому что нужно подсунуть свои определения для _sys_command_string(), _ttywrch() и _sys_exit(). А, ну вот. Они используются EventRecorder, не хочу ломать логику, создавая грабли на новом месте. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 183 4 июня, 2021 Опубликовано 4 июня, 2021 · Жалоба 1 минуту назад, Forger сказал: Да и куча используется только на старте приложения, поэтому дефрагментация и тп. ей не грозят в принципе. Мне сейчас главное понять, в каком месте моего изучения C++ вылезет неявное выделение динамической памяти, дабы знать, где делать этого не следует. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 26 4 июня, 2021 Опубликовано 4 июня, 2021 · Жалоба 3 minutes ago, Arlleex said: Мне сейчас главное понять, в каком месте моего изучения C++ вылезет неявное выделение динамической памяти, дабы знать, где делать этого не следует. Не использовать stl шаблоны с использованием кучи, ну и явно не использовать ее саму ) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VladislavS 39 4 июня, 2021 Опубликовано 4 июня, 2021 · Жалоба Что-то вы всё усложняете. F072-CDC.rar Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 183 4 июня, 2021 Опубликовано 4 июня, 2021 · Жалоба Уже разобрался. В ARM Compiler 6 Reference Guide версии 6.13 вполне четко описано, что делать, чтобы отключить полухостинг. Про __ARM_use_no_argv там тоже в этом контексте вполне понятно написано. Не ясно, зачем они это описание исключили из всех последующих версий, оставив ровно такую же функциональность. Сейчас все работает как нужно, без MicroLIB, с размером кучи, равным 0. Достаточно, на самом деле, где-нибудь в исходниках включить определение двух глобальных символов __asm(".global __ARM_use_no_argv"); __asm(".global __use_no_semihosting"); Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться