vallav 0 6 июня, 2010 Опубликовано 6 июня, 2010 (изменено) · Жалоба Ответы на все вопросы, кроме первого и частично третьего, данные vallav не верные, Вы забыли дать правильные ответы. Или их не дали по причине - характер не позволяет давать глупые ответы, даже на глупейше-пустейшие вопросы... Изменено 6 июня, 2010 пользователем rezident Излишнее цитирование. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sonycman 1 6 июня, 2010 Опубликовано 6 июня, 2010 · Жалоба 2. Какой из них инициализируется аппаратно? Ни какой. Но один из них инициализируется в коде инициализации. Щас гляну, как он называется - во - MSP. Почему до Вас никак не дойдёт, что один из указателей SP инициализируется аппаратно? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vallav 0 6 июня, 2010 Опубликовано 6 июня, 2010 (изменено) · Жалоба Почему до Вас никак не дойдёт, что один из указателей SP инициализируется аппаратно? Так я разве спорю. Конечно, core reads the start sp... Только как? Мое мнение, в NXP не идиоты делать это аппаратно, когда это можно с тем же успехом сделать программно в коде инициализации. Что там и делается. Полагаете - просто на всякий случай? Код инициализации игнорирует значение sp при входе в него и записывает в sp ( программно ) значение, равное __initial_sp. Кстати, задумайтесь - после сброса начинает работать бутлоадер. У него sp откуда берется? Аппаратно устанавливается на 0xffffffff, если чип не целованный? А если прога уже загружалась, то на то, что в первом слове флеша. Так? И что бутлоадер с этим делает? Выкидывает и ставит свое значение? А перед запуском проги читает значение из первого слова флеша и заносит его в sp? Иде в этом логика? Кстати - кривой бангладорский при запуски проги про sp даже не вспоминает. Что у него было, то и оставляет. Как с этим у родного бутлоадера - пока не знаю. Не надо свято верить тому, что напечатоно. И в печатных текстах бывают ошибки и казусы... Кстати надо попробовать. Засунуть в первое слово флеша что нибудь отличное от __initial_sp и посмотреть, с какмим sp прога в main вывалится. Если со значением __initial_sp - что делать будем? И про ip. Полагаете, после сброса он загружается значением из второго слова флеша и бутлоадер стартует с этого адреса? Или бутлоадер умеет игнорировать значение ip и стартует со своего адреса? Попробуйте над этим задуматься. Изменено 6 июня, 2010 пользователем rezident Излишнее цитирование. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 2 6 июня, 2010 Опубликовано 6 июня, 2010 · Жалоба В связи с предыдущим постом продолжаю вопросник: 1. Как называется фирма-разработчик ядра Corteх-M3 используемого фирмой NXP в контроллерах LPC17xx? 2. Какой блок памяти отображается на адрес 0x00000000 в LPC17xx после аппаратного ресета? 3. Что находится в этом блоке памяти? 4. Может-ли в качестве вектора Reset указан адрес функции написанный на языке высокого уровня, например, 'C'? 5. Использует-ли функция написанная на языке 'C' стек и для чего? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vallav 0 6 июня, 2010 Опубликовано 6 июня, 2010 (изменено) · Жалоба В связи с предыдущим постом продолжаю вопросник: Я сейчас другим занят - жду от Вас правильных ответов на первый опросник. Увы, пока их не будет... Изменено 6 июня, 2010 пользователем rezident Излишнее цитирование. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 2 6 июня, 2010 Опубликовано 6 июня, 2010 · Жалоба Увы, пока их не будет... "Студент"! Вы не поняли - семестр кончился - началась сессия. :). Но вопросы пока доброжелательно-наводящие, а не на засыпку. Я сейчас другим занят Пока не страшно. Сдача и пересдача экзаменов до осени. Потом отчисление :) :(. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vallav 0 6 июня, 2010 Опубликовано 6 июня, 2010 · Жалоба "Студент"! Вы не поняли - семестр кончился - началась сессия. :). Пока не страшно. Сдача и пересдача экзаменов до осени. Потом отчисление. Кстати, Вы наверно будите удивлены, но в качестве адреса ресета может быть указана функция, написанная на C. Если модуль с ней слинкован в флешь. Не верите - а попробуйте. Хотя - Вы же fabless... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 2 6 июня, 2010 Опубликовано 6 июня, 2010 · Жалоба Кстати, Вы наверно будите удивлены, но в качестве адреса ресета может быть указана функция, написанная на C. Ответ правильный. Угадали? Но процент угадывания много ниже статистических 50% :(. Не везет :). Теперь ответ на вопрос номер 5. И после подробнее насчет "идиотов": Мое мнение, в NXP не идиоты делать это аппаратно, когда это можно с тем же успехом сделать программно в коде инициализации. Что там и делается. Не надо свято верить тому, что напечатоно. И в печатных текстах бывают ошибки и казусы... и соответственно того, когда и кем указатель стека иницализируется до момента вызова этой самой первой функции. Кстати, на вопросы надо отвечать на все - Вы слишком много вопросов пропускаете. Незачет будет! Хотя - Вы же fabless... С чего это Вы так тешите себя этой иллюзией :). Придется и с этой иллюзией Вас обломать. В На фото в приложении Cortex-M3 в двух экземпярах. Есть и третий. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vallav 0 6 июня, 2010 Опубликовано 6 июня, 2010 · Жалоба Ответ правильный. Угадали? Теперь ответ на вопрос номер 5. И после подробнее насчет "идиотов": Неужели проверить успели? Вот это скорость... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 2 6 июня, 2010 Опубликовано 6 июня, 2010 · Жалоба Неужели проверить успели? Проверять, получать результаты и не мочь их осмыслить и понять, что удел ламеров и недоучек. Нормальные люди действуют предварительно все продумав и наверняка - знают, что делают и все задуманное получается. Посему, давайте на заданные вопросы ищите ответы. Может поможет. Но я на этом вообще-то совершенно не настаиваю - вопросы задумывались прежде всего для других форумчан. Вот это скорость... Офигительная. Настоящая машина времени - на майские праздники пришли борды и тогда-же я портировал операционку, консольку, Ethernet, загрузчик и прочее. До этого, урывками почитывал первоисточники - ну думаю в сумме не менее 40 часов. Месяц тому назад еще сутки усиленного чтения и за 3 дня вышеупомянутое было поднято. Сейчас занимаюсь другим. Дней через 10 дней продолжу. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Student Pupkin 0 6 июня, 2010 Опубликовано 6 июня, 2010 (изменено) · Жалоба Извините что вторгаюсь :) . Но у меня попкорн уже кончился Так я разве спорю. Конечно, core reads the start sp... Только как? Мое мнение, в NXP не идиоты делать это аппаратно, когда это можно с тем же успехом сделать программно в коде инициализации. Что там и делается. Я тоже думал, что бутлоадер переписывает из 0x0 константу в SP, а затем использует 0x4 как адрес перехода на пользовательскую программу. Правильно? Если не прав - поправьте меня. Полагаете - просто на всякий случай? Код инициализации игнорирует значение sp при входе в него и записывает в sp ( программно ) значение, равное __initial_sp. Кстати, задумайтесь - после сброса начинает работать бутлоадер. У него sp откуда берется? Аппаратно устанавливается на 0xffffffff, если чип не целованный? Область памяти BOOTROM - 0x1FFF 0000 - 0x1FFF 1FFF 8 kB Boot ROM with flash services В общем случае положение таблицы векторов для ЦПУ Cortex-M3 (разработчик - ОАО "Advanced RISC Machine") определяется в том числе регистром VTOR (Vector Table Offset Register - принадлежность ЦПУ Cortex-M3). Этот регистр включает: - бит TLBBASE (0: Table base is in CODE, base address 0x00000000; 1: Table base is in RAM, base address 0x20000000) - поле TBLOFF[28:7] - смещение, которое прибавляется к base address (правдя я не понял как вычисляется адрес :)) Далее в документе "ARMv7-M Architecture Reference Manual" есть приписка "An implementation can include configuration input signals that determine the reset value of the TBLOFF bit field". Просто опция при покупке ЦПУ Cortex-M3. В случае LPC17xx - TLBOFF после сброса содержит не нули, а значение (какое - не знаю :)), благодаря которому таблицей веторов для ЦПУ Cortex-M3 будет являться начало области памяти BOOTROM. В дополнение - приписка из "LPC17xx User manual" (стр.745): Privileged software can write to the VTOR to relocate the vector table start address to a different memory location, in the range 0x00000080 to 0x3FFFFF80 Таким образом - запуск программы бутлоадера выполняется согласно тому, как это заложено в архитектуре ЦПУ Cortex-M3 - SP и IP загружаются аппаратно. Константы для загрузки беруться из BOOTROM (полагаю, что таблица векторов размещена в ее начале). vallav, тут даже мне понятно :). В конечном счете - NXP нигде никак не допиливают ЦПУ Cortex-M3. Они просто покупают его, возможно с какими-то опциями (которые все в доке от ARM описаны), и вставляют (грубо :)) в свой микроконтроллер (в книгах 20-30 летней давности был термин однокристальная микроЭВМ - может этот термин понятнее, прото ощущение, что вы не очень понимаете, где заканчивается творчество инженеров ARM и начинается творчество инженеров NXP). Возможно что и "опция" - это притяни вот эту ногу у себя в кристалле к нулю - будет это, а притяни к единице - будет то-то... Ну и прошивают в BOOTROM свою программу-загрузчик. По-моему простая аналогия между производителем материнской платы и процессором от Intel, который в эту плату вставляется - получается ЭВМ :). Хочешь знать как работает процессор - читай доки от Intel. Хочешь знать, что есть на материнской плате и как с эим работать процессору - читай доки от производителя материнской платы. Без обид :) Изменено 6 июня, 2010 пользователем Student Pupkin Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Student Pupkin 0 6 июня, 2010 Опубликовано 6 июня, 2010 · Жалоба Каюсь :) . Оказывается регистр VTOR к переотображению таблицы векторов (по умолчанию с 0х0) на область BOOTROM отношения не имеет :). Имеет отношение регистр MEMMAP. Но суть не меняется :) Following a hardware reset, the Boot ROM is temporarily mapped to address 0. (LPC17xx User Manual, стр.15) Интересно теперь, как bootloader запускает пользовательскую программу после того, как устанавливает MEMMAP в 1 - програмно (переписывая константу из 0x0 в SP и выполняя переход по адресу, лежащему в 0х4) или есть возможность сформировать reset только для ядра (т.е. чтобы MEMMAP остался с установленным в 1 битом MAP)? :laughing: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 2 6 июня, 2010 Опубликовано 6 июня, 2010 · Жалоба програмно (переписывая константу из 0x0 в SP и выполняя переход по адресу, лежащему в 0х4)... Не вижу нималейших причин делать иначе - отмапирована только таблица векторов сам bootloader исполняется всегда на своем месте, посему просто убирает свою таблицу векторов, считывает, устанавливает и запускает. Никаких ограничений на софтовую инициализацию MSP нет. У меня точно также мой загрузчик отрабатывает, только,естественно сам целиком находясь на нулевых адресах он еще и положение таблицы векторов основной программы устанавливает. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Student Pupkin 0 6 июня, 2010 Опубликовано 6 июня, 2010 · Жалоба А еще вопросик :) - MEMMAP делает переотображение на таблицу в BOOTROM. Т.е. в том числе и чтение первых 256 байт начиная с адреса 0х0000 на самом деле будет являться чтением первых 256 байт области BOOTROM? Значит загрузчику, прежде чем начать проверку пользовательской таблицы векторов (первых 6 слов) на "валидность", необходимо сначала установить MEMMAP в 1 (User Mode)? Ведь в ином случае она недоступна? Правильно? (вопрос, чтобы просто кое-что себе в голове устаканить :)) А остальные производители микроконтроллеров на ядре Cortex-M3 тоже вместо Vector Table Offset Register используют "внешний" (по отношению к Cortex-M3) ремап? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vallav 0 7 июня, 2010 Опубликовано 7 июня, 2010 · Жалоба А еще вопросик :) - MEMMAP делает переотображение на таблицу в BOOTROM. Т.е. в том числе и чтение первых 256 байт начиная с адреса 0х0000 на самом деле будет являться чтением первых 256 байт области BOOTROM? Значит загрузчику, прежде чем начать проверку пользовательской таблицы векторов (первых 6 слов) на "валидность", необходимо сначала установить MEMMAP в 1 (User Mode)? Ведь в ином случае она недоступна? Правильно? (вопрос, чтобы просто кое-что себе в голове устаканить :)) А остальные производители микроконтроллеров на ядре Cortex-M3 тоже вместо Vector Table Offset Register используют "внешний" (по отношению к Cortex-M3) ремап? Проверено на железе - плата mbed c lpc1768. Значение нулевого слова в флеше 0x0, 0xffff, 0xffffffff. Два бутлоадера - родной и кривой бангалорский. Прога - мигалка светодиодами грузится иработает. То есть, чему равно нулевое слово в флеше - глубоко фиолетово. Можно использовать в своих целях. Первое слово в флеше - используется бутлоадером для запуска пользовательской проги. При сбросе - ip вероятней всего имеет значение 0x1fff1ff1 - адрес начала последней строки ПЗУ ( ассоциации с x86 навевает ). Есть такая IAP комманада - выход в ISP. Именно она после сброса и выполняется. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться