jenya7 0 6 декабря, 2023 Опубликовано 6 декабря, 2023 (изменено) · Жалоба есть такая ф-ция char *ToLower(char *str) { int i; for(i = 0; i < strlen(str); i++) { if(str[i]>='A' && str[i]<='Z') str[i]=str[i]+32; } return str; } когда передаю переменную в качестве аргумента во всех контролерах работает без проблем. ToLower(some_string); когда передаю константную строку в качестве аргумента ToLower("WRITE"); в контролерах с внутренней флеш памятью работает без проблем. а в контролерах с внешней флеш памятью (по крайней мере в NXP) компайлер помещает строку во флеш и я соответсвенно получаю void MemManage_Handler(void) { while(1) {} } можно как то какой нибудь прагмой объяснить компайлеру чтоб помещал строку в RAM? Изменено 6 декабря, 2023 пользователем jenya7 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 183 6 декабря, 2023 Опубликовано 6 декабря, 2023 · Жалоба char str[] = "WRITE"; ToLower(str); 3 минуты назад, jenya7 сказал: в контролерах с внутренней флеш памятью работает без проблем Недоговариваете что-то, ибо работать будет, разве что, только в AVR и подобных. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 6 декабря, 2023 Опубликовано 6 декабря, 2023 · Жалоба On 12/6/2023 at 10:08 AM, Arlleex said: char str[] = "WRITE"; это не указатель на константу? компилятор выделит переменную в RAM? On 12/6/2023 at 10:08 AM, Arlleex said: Недоговариваете что-то, ибо работать будет, разве что, только в AVR и подобных. почему нет? во всех кортексах работает. и не только. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 183 6 декабря, 2023 Опубликовано 6 декабря, 2023 · Жалоба 2 минуты назад, jenya7 сказал: это не указатель на константу? компилятор выделит переменную в RAM? Ага. Цитата почему нет? во всех кортексах работает. и не только. Неа. Разве только что если код из ОЗУ запускается... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 61 6 декабря, 2023 Опубликовано 6 декабря, 2023 · Жалоба 23 minutes ago, jenya7 said: компайлер помещает строку во флеш Компилятор ничего не помещает в память, т.к. это удел линковщика. Но и он подчиняется писанным законам - скрипту. В первую очередь разбирайтесь с ним) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 6 декабря, 2023 Опубликовано 6 декабря, 2023 (изменено) · Жалоба On 12/6/2023 at 10:25 AM, Arlleex said: Ага. Неа. Разве только что если код из ОЗУ запускается... не знаю. у нас все проекты прожигаются во флеш, по крайней мере наш код. в RAM алоцируются только системные функции. Изменено 6 декабря, 2023 пользователем jenya7 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 183 6 декабря, 2023 Опубликовано 6 декабря, 2023 · Жалоба 2 минуты назад, jenya7 сказал: не знаю. у нас все проекты прожигаются во флеш И я не знаю, но приведенный код в том виде, в каком показан - не корректен. 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 6 декабря, 2023 Опубликовано 6 декабря, 2023 (изменено) · Жалоба On 12/6/2023 at 10:33 AM, Arlleex said: И я не знаю, но приведенный код в том виде, в каком показан - не корректен. тут нужно объясниться. в нормальном мире такое не может произойти. но у нас один кадр написал парсер на сотни строк в таком виде if(strcmp(ToLower(args[1]), ToLower("WRITE")) == 0) ему видите ли так удобно. я не уследил и это художество гуляет уже в нескольких проектах. но работает. а в новом камне с внешней флеш памятью вылезла проблема. Изменено 6 декабря, 2023 пользователем jenya7 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 183 6 декабря, 2023 Опубликовано 6 декабря, 2023 · Жалоба Значит никогда не работало правильно. Либо результат оптимизации, но сомнительно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_3m 9 6 декабря, 2023 Опубликовано 6 декабря, 2023 · Жалоба 2 минуты назад, jenya7 сказал: это художество это гуляет уже в нескольких проектах. но работает. а в новом камне с внешней флеш памятью вылезла проблема. Оно может работать только когда строка расположена в ОЗУ. Ваша функция ToLower меняет исходную строку. Строку во флэш невозможно изменить. Обращение на запись к внутренней флэш обычно игнорируется а к внешней - возможны варианты, например исключение. 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 61 6 декабря, 2023 Опубликовано 6 декабря, 2023 · Жалоба Налицо проблема неполного понимания работы инструментария: 1. В какую память и что помещается. 2. Как, даже если строка и укладывается в ro-память, она может меняться? Тут хотя бы в дизассемблер заглянуть надо. Или в листинг функции. 7 minutes ago, _3m said: запись к внутренней флэш обычно игнорируется Только не на ARM))) HF или иное исключение шины гарантированно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 6 декабря, 2023 Опубликовано 6 декабря, 2023 (изменено) · Жалоба Всё. Когда мат иссяк пошёл посмотрел старые проекты - он там всё переделал. В новом проекте он уже забыл об этом. Извиняюсь за это насилие над коллективным разумом. Изменено 6 декабря, 2023 пользователем jenya7 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dimka76 62 6 декабря, 2023 Опубликовано 6 декабря, 2023 · Жалоба On 12/6/2023 at 11:25 AM, Arlleex said: Ага. Неа. Разве только что если код из ОЗУ запускается... Почему ? У кортекса мосты между ОЗУ и ПЗУ и все будет прекрасно работать. Сам на кортексах посмотянно printf использую и все замечательно работает. printf("bla-bla-bla\r\n"); Чем это отличается от того, что привел ТС ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MrYuran 27 6 декабря, 2023 Опубликовано 6 декабря, 2023 · Жалоба В 06.12.2023 в 13:21, dimka76 сказал: printf("bla-bla-bla\r\n"); Чем это отличается от того, что привел ТС ? Тем, что у вас нет функции, которая пытается изменить "bla-bla-bla\r\n" по указателю Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dimka76 62 6 декабря, 2023 Опубликовано 6 декабря, 2023 · Жалоба On 12/6/2023 at 1:26 PM, MrYuran said: Тем, что у вас нет функции, которая пытается изменить "bla-bla-bla\r\n" по указателю Точно, я на это внимания не обратил. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться