-
- Вот как это делает Microchip в своих GCC-based компиляторах XC (мануал приложен): MBedder(1184 знак., 16.08.2019 16:08 - 16:18)
- Удобно. В принципе, ничто не мешает GCC на любом этапе контролировать наложение переменных. И я нашёл Dingo(277 знак., 17.08.2019 07:25)
- Описать для неё сегмент, типа mse homjak(483 знак., 15.08.2019 19:27)
- не работает. Говорит Mefod(73 знак., 16.08.2019 09:03)
- значит микрочиповый ХС32 не настоящий ГЦЦ. - mse homjak(16.08.2019 10:29)
- не работает. Говорит Mefod(73 знак., 16.08.2019 09:03)
- Кого я только не спрашивал, и сколько раз: ЗАЧЕМ??? Толкового ответа так и не получил. - il-2(15.08.2019 19:04)
- ответил ниже. Что-то ссылкой не отправляется сообщение - Mefod(16.08.2019 08:53)
- Например, когда приложение хочет сообщить загрузчику, что хочет перегрузиться. - VLLV(15.08.2019 20:44)
- Поскольку это последнее, что приложение сделает, то допустимо по ссыке установить значение и дёрнуть сброс. Имхо. - Dingo(16.08.2019 12:32)
- По какой ССЫКЕ? - VLLV(16.08.2019 12:42)
- очевидно, имеется в виду указаель - SciFi(16.08.2019 12:48)
- Да, верно. - Dingo(16.08.2019 13:06)
- В загрузчике эту память нужно вырезать и обращаться к несуществующей памяти? Да я сдохну от злости через неделю, когда забуду, какой это все работает. - VLLV(16.08.2019 13:55)
- Активно использую SPI flash, там выделены сектора для разных функций. Линкер тут вообще не помощник. Не беда, сделал структуру, добавляю туда поля размером 4 кБайт (размер сектора), использую offsetof() для вычисления адресов. Красота! Всё SciFi(24 знак., 16.08.2019 14:30)
- Ну, если загрузчик разросся до поддержки flash, то да. - VLLV(16.08.2019 15:20)
- загрузчик и не должен больше ничего, как уметь читать флэш(это копейки) и писать в кодовую память. А писать и стирать флэш будет основная прошивка по любому интерфейсу, хоть блюпуп, хоть usb, хоть вайфай - abivan(16.08.2019 16:17)
- Удобно, но не догма. В приборе вообще может отсутствовать внешняя флэш, а прошивкой неправильного приложения можно зарубить возможность принять новое. Так что загрузчики с приемом данных по интерфейсу и прямой записью в программную память все еще VLLV(12 знак., 16.08.2019 16:23)
- существуют, кто ж спорит, но когда встает вопрос выпуска серии приборов с разными интерфейсами(у нас пока 3 485, USB и ethernet) вот тут то и становится неохото писать 3 разных загрузчика. - abivan(16.08.2019 17:54)
- Это можно назвать "аварийный режим". Если есть возможность, лучше его делать, конечно. - SciFi(16.08.2019 16:58)
- Удобно, но не догма. В приборе вообще может отсутствовать внешняя флэш, а прошивкой неправильного приложения можно зарубить возможность принять новое. Так что загрузчики с приемом данных по интерфейсу и прямой записью в программную память все еще VLLV(12 знак., 16.08.2019 16:23)
- загрузчик и не должен больше ничего, как уметь читать флэш(это копейки) и писать в кодовую память. А писать и стирать флэш будет основная прошивка по любому интерфейсу, хоть блюпуп, хоть usb, хоть вайфай - abivan(16.08.2019 16:17)
- Ну, если загрузчик разросся до поддержки flash, то да. - VLLV(16.08.2019 15:20)
- Активно использую SPI flash, там выделены сектора для разных функций. Линкер тут вообще не помощник. Не беда, сделал структуру, добавляю туда поля размером 4 кБайт (размер сектора), использую offsetof() для вычисления адресов. Красота! Всё SciFi(24 знак., 16.08.2019 14:30)
- В загрузчике эту память нужно вырезать и обращаться к несуществующей памяти? Да я сдохну от злости через неделю, когда забуду, какой это все работает. - VLLV(16.08.2019 13:55)
- Да, верно. - Dingo(16.08.2019 13:06)
- очевидно, имеется в виду указаель - SciFi(16.08.2019 12:48)
- По какой ССЫКЕ? - VLLV(16.08.2019 12:42)
- Поскольку это последнее, что приложение сделает, то допустимо по ссыке установить значение и дёрнуть сброс. Имхо. - Dingo(16.08.2019 12:32)
- Вот сейчас захотелось странного. Выделить кусочек ОЗУ для сохранения информации после (программного) сброса. Верхушка занята стеком, перед запуском основной прошивки там немного шалит загрузчик. Внизу то же самое. Остаётся где-то в середине, SciFi(43 знак., 15.08.2019 20:14)
- Верно рассуждаете, товарищ. Имеется загрузчик и приложение. 1) в загрузчике выделить noinit область по адресу, чтобы приложение могло хранить в нем необходимые данные, которые нельзя портить. 2) обмен данными между ними для взаимодействия. - Mefod(16.08.2019 08:35)
- В скрипт линкера всё равно надо лезть. Проще всего сдвинуть границы ОЗУ, чтобы он не занимал самый верх или низ. А туда обращаться через указатель. - SciFi(16.08.2019 09:12)
- Так и сделано. Но вот интересно есть ли у gcc что-то подобное как у iar с кейлом. Что находится в сети либо не работает, либо делает не так (как пример через указатель) - Mefod(16.08.2019 09:17)
- Дык всё равно к линкеру же: Dingo(1221 знак., 16.08.2019 12:44 - 12:50)
- --> - SciFi(16.08.2019 09:20, ссылка)
- Так и сделано. Но вот интересно есть ли у gcc что-то подобное как у iar с кейлом. Что находится в сети либо не работает, либо делает не так (как пример через указатель) - Mefod(16.08.2019 09:17)
- В скрипт линкера всё равно надо лезть. Проще всего сдвинуть границы ОЗУ, чтобы он не занимал самый верх или низ. А туда обращаться через указатель. - SciFi(16.08.2019 09:12)
- Верно рассуждаете, товарищ. Имеется загрузчик и приложение. 1) в загрузчике выделить noinit область по адресу, чтобы приложение могло хранить в нем необходимые данные, которые нельзя портить. 2) обмен данными между ними для взаимодействия. - Mefod(16.08.2019 08:35)
- Ответ Алексу и Хомяку: использовать указатели. А с линкером проводить отдельную разъяснительную работу. Мухи - отдельно, котлеты - отдельно. Но это не панацея, а только мое ИМНО :-) - il-2(15.08.2019 19:53)
- Я чуть ниже показал, как в МПЛАБЕ объясняют. И без указателей. - mse homjak(15.08.2019 20:13)
- Вариабля, например, отображена в памяти, но, физически, находится в ФПГА, например, через внешнюю шыну. И прецтавляет из себя некий мегапорт в соседнюю реальность. - mse homjak(15.08.2019 19:35)
- Так у нас и было и сделано и собственно другой вменяемой причины нет. - PlainUser(16.08.2019 10:20)
- например на RAM отображено некое устройство. - Alex68(15.08.2019 19:23)
- Теоретически: ptr = (uXX_t *)0x0BADC0DEUL; val = *ptr;. Но как без правки файла линкера объяснить компилятору, чтобы он там больше ничего не располагал? Предположу, что задача не совсем корректно сформулирована. - Dingo(15.08.2019 10:11)
- Нет, да и зачем? Расположение переменной - не забота исходника - lloyd(15.08.2019 09:51)
- IAR и Keil спокойно делают с помощью pragma location и at соответственно. Жаль конечно, что для gcc не реализовали. - Mefod(15.08.2019 15:02)
- Да? А кого это забота? Компилятор-линкер должен как-то определить что переменную нужно положить в DTCM/SDRAM/SRAMx или функцию в ITCM/SRAM положить? B как они должны такое решение принимать? - Apтём(15.08.2019 10:58)
- Вот как это делает Microchip в своих GCC-based компиляторах XC (мануал приложен): MBedder(1184 знак., 16.08.2019 16:08 - 16:18)