Это моё личное предвзятое мнение. Любое совпадение с реальностью является случайным и непреднамеренным.
-
- Хорошо, меняем goto на переменную : void * my_ptr= __program_start; Результат тот же. - Vladimir Ljaschko(15.06.2011 10:09)
- Надо число подчеркивания сократить, примерно так void * my_ptr= _program_start; - AlexBi(15.06.2011 10:15)
- Вообще, где этот __program_start описан ? - =AlexD=(15.06.2011 10:14)
- в асм стартапе, файл включен в проект и реально подключается - Vladimir Ljaschko(15.06.2011 10:17)
- Так я и думал, значит правильно опиши его в С файле, но одно подчёркивание впереди убери. - =AlexD=(15.06.2011 10:20)
- Если описать так, как ты указал выше, то ассемблерный стартап окажется снаружи, это будет все равно что main, а нужна полная инициализация включая стек. Можно поиграться с location, конечно... - Vladimir Ljaschko(15.06.2011 10:29)
- А по WDT не проще перезапуститься? В Cortex-M3 так вообще NVIC_SystemReset() предусмотрели. - vmp(15.06.2011 10:53)
- Да мне не перезапуск нужен, а старт приложения из загрузчика. Создал таблицу векторов, с адресами ISR проблем нет, а вот адрес старта в лоб не получилось - только через location или путем выдергивания вектора с 0xfffe (MSP430) - Vladimir Ljaschko(15.06.2011 10:59)
- А откуда загрузчик вообще может узнать адрес запуска приложения? Он же компилируется отдельно от этого приложения. Так что чтение из вектора - единственно доступный способ. - vmp(15.06.2011 11:05)
- Не нравится разбрасывание крупиц интеллекта по разным кускам, в том числе в ПиСишную программу загрузки. - Vladimir Ljaschko(15.06.2011 11:21)
- А писишная программа-то причем? Либо ваш загрузчик принимает приложение в стандартном формате, с адресом запуска в таблице векторов и извлекает этот адрес из этой таблице при запуске приложения, либо приложение должно быть сформировано по каким-то vmp(394 знак., 15.06.2011 11:29)
- Ну а я что пытался сделать - заполнить адрес старта в таблице средствами компилятора! :) - Vladimir Ljaschko(15.06.2011 11:35)
- Делал для Cortex-M3. В заголовок клал адрес __vector_table, а ее заполнял сам компилятор с линкером. vmp(181 знак., 15.06.2011 11:44)
- В MSP таблица фиксирована. Если ее убрать со своего места, приложение без загрузчика работать не будет. Хочется же всего :) Короче, сделал через сегмент Vladimir Ljaschko(415 знак., 15.06.2011 12:05)
- Делал для Cortex-M3. В заголовок клал адрес __vector_table, а ее заполнял сам компилятор с линкером. vmp(181 знак., 15.06.2011 11:44)
- +1 - Гудвин(15.06.2011 11:33)
- Ну а я что пытался сделать - заполнить адрес старта в таблице средствами компилятора! :) - Vladimir Ljaschko(15.06.2011 11:35)
- А писишная программа-то причем? Либо ваш загрузчик принимает приложение в стандартном формате, с адресом запуска в таблице векторов и извлекает этот адрес из этой таблице при запуске приложения, либо приложение должно быть сформировано по каким-то vmp(394 знак., 15.06.2011 11:29)
- Не нравится разбрасывание крупиц интеллекта по разным кускам, в том числе в ПиСишную программу загрузки. - Vladimir Ljaschko(15.06.2011 11:21)
- А откуда загрузчик вообще может узнать адрес запуска приложения? Он же компилируется отдельно от этого приложения. Так что чтение из вектора - единственно доступный способ. - vmp(15.06.2011 11:05)
- Да мне не перезапуск нужен, а старт приложения из загрузчика. Создал таблицу векторов, с адресами ISR проблем нет, а вот адрес старта в лоб не получилось - только через location или путем выдергивания вектора с 0xfffe (MSP430) - Vladimir Ljaschko(15.06.2011 10:59)
- Может на нулевой адрес переход? - Михаил Е.(15.06.2011 10:35)
- А по WDT не проще перезапуститься? В Cortex-M3 так вообще NVIC_SystemReset() предусмотрели. - vmp(15.06.2011 10:53)
- Если описать так, как ты указал выше, то ассемблерный стартап окажется снаружи, это будет все равно что main, а нужна полная инициализация включая стек. Можно поиграться с location, конечно... - Vladimir Ljaschko(15.06.2011 10:29)
- Так я и думал, значит правильно опиши его в С файле, но одно подчёркивание впереди убери. - =AlexD=(15.06.2011 10:20)
- в асм стартапе, файл включен в проект и реально подключается - Vladimir Ljaschko(15.06.2011 10:17)
- а _program_start ? - =AlexD=(15.06.2011 10:13)
- Хорошо, меняем goto на переменную : void * my_ptr= __program_start; Результат тот же. - Vladimir Ljaschko(15.06.2011 10:09)