Salamander 2 8 марта, 2015 Опубликовано 8 марта, 2015 (изменено) · Жалоба Может быть можно расположить переменную по фиксированному адресу? Как это сделать? Ау? Изменено 8 марта, 2015 пользователем Salamander Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 8 марта, 2015 Опубликовано 8 марта, 2015 · Жалоба Добавить к переменной атрибут __attribute((at(0x08020000))) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
x893 35 8 марта, 2015 Опубликовано 8 марта, 2015 (изменено) · Жалоба А можно просто документацию почитать - там гораздо более интресные есть аттрибуты. И возможности о которых даже не подозреваешь. Изменено 8 марта, 2015 пользователем x893 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
hlebn 0 8 марта, 2015 Опубликовано 8 марта, 2015 · Жалоба у меня для stm32f407 обновление через стандартный лоадер так: static void BootLoader() { void (*SysBootLoaderJmp)(void)=(void (*)(void))(*((uint32_t *)0x1fff0004)); __set_PRIMASK(1); RCC_DeInit(); SysTick->CTRL=0; SysTick->LOAD=0; SysTick->VAL=0; __set_PRIMASK(1); __set_MSP(*((uint32_t *)0x1fff0000)); SysBootLoaderJmp(); while(1); } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Salamander 2 8 марта, 2015 Опубликовано 8 марта, 2015 · Жалоба Добавить к переменной атрибут __attribute((at(0x08020000))). Спасибо, а я хотел бы еще так для себя поинтересоваться, а если в процессе компиляции компилятор присвоит какой-либо переменной некий адрес, а потом я в конце захочу указанным атрибутом этот же адрес присвоить другой переменной? Что будет? Или компилятор в первую очередь распределяет явно указанные адреса? Погодите... но если я в бутлодере напишу __attribute((at(0x08020000))) то эта переменная очистится... Как решить задачу? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 8 марта, 2015 Опубликовано 8 марта, 2015 · Жалоба а я хотел бы еще так для себя поинтересоваться, а если в процессе компиляции компилятор присвоит какой-либо переменной некий адрес, а потом я в конце захочу указанным атрибутом этот же адрес присвоить другой переменной? Что будет? Или компилятор в первую очередь распределяет явно указанные адреса? Если конкретный адрес задан, то компилятор туда ничего от себя не поместит. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 63 8 марта, 2015 Опубликовано 8 марта, 2015 · Жалоба Как мне в основной программе записать флажок, чтобы этот флажок был виден в бутлодыре? Флажка тут мало: он может и случайно оказаться равен 1. Используйте 32 битное слово с каким-нибудь нетривиальным значением. Передать есть несколько способов (в порядке нарастания сложности): 1. Записать в какой-нибудь периферийный scratchpad-регистр (скажем, регистры ключа AES у вашего процессора). 2. "Спрятать" кусочек RAM от линкера, и писать-читать по указателю. 3. Определить честную секцию с фиксированным адресом для хранения флага. Со стороны загрузчика она должна иметь какой-нибудь атрибут типа "no init", иначе при старте будет затерта нулями. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Salamander 2 8 марта, 2015 Опубликовано 8 марта, 2015 · Жалоба Хитро.... Я уж лучше как изначально задумывал - на HC-05 ножки буду зажигать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Salamander 2 9 марта, 2015 Опубликовано 9 марта, 2015 · Жалоба Тему почти можно закрывать. С ножками от HC-05 все получилось. В C++ Builder проект добавил VCL, обеспечивающий передачу по протоколу YModem. Вроде бы коннект состоялся, но я ему подсунул какую-то лабуду и конечный результат не оценивал. Остается дождаться, когда китайские братья пришлют еще один HC-05 и попробовать осуществить полноценную прошивку по воздуху Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 35 9 марта, 2015 Опубликовано 9 марта, 2015 (изменено) · Жалоба Остается дождаться, когда китайские братья пришлют еще один HC-05 и попробовать осуществить полноценную прошивку по воздуху Добавлю, если хотите качественой прошивки, незабывайте про то, что передавать нужно пакетами с контр. суммой, и иметь механизм перезапросов. Не пробовал для этой цели Ymodem, делал свои протоколы. Изменено 9 марта, 2015 пользователем mantech Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 9 марта, 2015 Опубликовано 9 марта, 2015 · Жалоба Тему может и можно закрывать, напишу просто как должно быть, чтобы наверняка, если кому пригодится... 1. бутлоадер должен грузиться первым, это если боевой прошивки нет позволит ее залить, также проверить ее целостность и секретность 2. флажок надо передавать через флэш, а переключение программа - бутлоадер делать через перезагрузку 3. отлаживаете программу как обычно через жетаг с 0 адреса, а потом просто компилите и собираете для работы с адреса Н для бутлоадера. Для этого в кейле можно сделать несколько режимов компиляции и сборки Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 63 9 марта, 2015 Опубликовано 9 марта, 2015 · Жалоба 2. флажок надо передавать через флэш, а переключение программа - бутлоадер делать через перезагрузку Зачем через флеш? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 9 марта, 2015 Опубликовано 9 марта, 2015 · Жалоба ... 3. отлаживаете программу как обычно через жетаг с 0 адреса, а потом просто компилите и собираете для работы с адреса Н для бутлоадера. Для этого в кейле можно сделать несколько режимов компиляции и сборки Они и есть Target-ы. Недавно спрашивали, зачем они. А вот зачем. :rolleyes: Лично мне из основной программы в загрузчик выходить не надо. У меня есть выключатель питания, так и попаду в сброс. Ах... флажок... Да, это можно использовать. Установил флажок, сбросился, дождался прошивки, прошился, сбросил флажок. А если не дождался, по таймауту время отсчитал, сбросил флажок, ушел в основную программу. Размещу флажок в Backup RAM, она у меня от батарейки питается. Тогда и сброс можно делать, как хочешь. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
scifi 1 9 марта, 2015 Опубликовано 9 марта, 2015 · Жалоба Зачем через флеш? Просто он так сделал, у него заработало, и менять не стал. Конечно, нужно проверять регистр причины сброса, и если сброс программный, то проверять флаг в ОЗУ. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Salamander 2 9 марта, 2015 Опубликовано 9 марта, 2015 · Жалоба Ух... только сейчас отладил всю цепочку переключений и обратно. У блютус модуля определенная задержка была при включении PIO, а я не мог понять приичны неустойчивости работы. Буду теперь YModem из наколенного состояния перепиливать в удобоваримое. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться