|
|
  |
Несколько вопросов по lpc176x |
|
|
|
Jun 6 2010, 12:42
|
Частый гость
 
Группа: Участник
Сообщений: 197
Регистрация: 8-04-05
Пользователь №: 3 977

|
Цитата(zltigo @ Jun 6 2010, 16:26)  Ответы на все вопросы, кроме первого и частично третьего, данные vallav не верные, Вы забыли дать правильные ответы. Или их не дали по причине - характер не позволяет давать глупые ответы, даже на глупейше-пустейшие вопросы...
Сообщение отредактировал rezident - Jun 6 2010, 21:36
Причина редактирования: Излишнее цитирование.
|
|
|
|
|
Jun 6 2010, 13:43
|
Частый гость
 
Группа: Участник
Сообщений: 197
Регистрация: 8-04-05
Пользователь №: 3 977

|
Цитата(sonycman @ Jun 6 2010, 17:12)  Почему до Вас никак не дойдёт, что один из указателей SP инициализируется аппаратно? Так я разве спорю. Конечно, core reads the start sp... Только как? Мое мнение, в NXP не идиоты делать это аппаратно, когда это можно с тем же успехом сделать программно в коде инициализации. Что там и делается. Полагаете - просто на всякий случай? Код инициализации игнорирует значение sp при входе в него и записывает в sp ( программно ) значение, равное __initial_sp. Кстати, задумайтесь - после сброса начинает работать бутлоадер. У него sp откуда берется? Аппаратно устанавливается на 0xffffffff, если чип не целованный? А если прога уже загружалась, то на то, что в первом слове флеша. Так? И что бутлоадер с этим делает? Выкидывает и ставит свое значение? А перед запуском проги читает значение из первого слова флеша и заносит его в sp? Иде в этом логика? Кстати - кривой бангладорский при запуски проги про sp даже не вспоминает. Что у него было, то и оставляет. Как с этим у родного бутлоадера - пока не знаю. Не надо свято верить тому, что напечатоно. И в печатных текстах бывают ошибки и казусы... Кстати надо попробовать. Засунуть в первое слово флеша что нибудь отличное от __initial_sp и посмотреть, с какмим sp прога в main вывалится. Если со значением __initial_sp - что делать будем? И про ip. Полагаете, после сброса он загружается значением из второго слова флеша и бутлоадер стартует с этого адреса? Или бутлоадер умеет игнорировать значение ip и стартует со своего адреса? Попробуйте над этим задуматься.
Сообщение отредактировал rezident - Jun 6 2010, 21:37
Причина редактирования: Излишнее цитирование.
|
|
|
|
|
Jun 6 2010, 14:03
|
Частый гость
 
Группа: Участник
Сообщений: 197
Регистрация: 8-04-05
Пользователь №: 3 977

|
Цитата(zltigo @ Jun 6 2010, 17:56)  В связи с предыдущим постом продолжаю вопросник: Я сейчас другим занят - жду от Вас правильных ответов на первый опросник. Увы, пока их не будет...
Сообщение отредактировал rezident - Jun 6 2010, 21:38
Причина редактирования: Излишнее цитирование.
|
|
|
|
|
Jun 6 2010, 14:07
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(vallav @ Jun 6 2010, 17:03)  Увы, пока их не будет... "Студент"! Вы не поняли - семестр кончился - началась сессия.  . Но вопросы пока доброжелательно-наводящие, а не на засыпку. Цитата Я сейчас другим занят Пока не страшно. Сдача и пересдача экзаменов до осени. Потом отчисление  .
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Jun 6 2010, 14:23
|
Частый гость
 
Группа: Участник
Сообщений: 197
Регистрация: 8-04-05
Пользователь №: 3 977

|
Цитата(zltigo @ Jun 6 2010, 18:07)  "Студент"! Вы не поняли - семестр кончился - началась сессия.  . Пока не страшно. Сдача и пересдача экзаменов до осени. Потом отчисление. Кстати, Вы наверно будите удивлены, но в качестве адреса ресета может быть указана функция, написанная на C. Если модуль с ней слинкован в флешь. Не верите - а попробуйте. Хотя - Вы же fabless...
|
|
|
|
|
Jun 6 2010, 14:26
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(vallav @ Jun 6 2010, 17:23)  Кстати, Вы наверно будите удивлены, но в качестве адреса ресета может быть указана функция, написанная на C. Ответ правильный. Угадали? Но процент угадывания много ниже статистических 50%  . Не везет  . Теперь ответ на вопрос номер 5. И после подробнее насчет "идиотов": Цитата Мое мнение, в NXP не идиоты делать это аппаратно, когда это можно с тем же успехом сделать программно в коде инициализации. Что там и делается. Не надо свято верить тому, что напечатоно. И в печатных текстах бывают ошибки и казусы... и соответственно того, когда и кем указатель стека иницализируется до момента вызова этой самой первой функции. Кстати, на вопросы надо отвечать на все - Вы слишком много вопросов пропускаете. Незачет будет! Цитата Хотя - Вы же fabless... С чего это Вы так тешите себя этой иллюзией  . Придется и с этой иллюзией Вас обломать. В На фото в приложении Cortex-M3 в двух экземпярах. Есть и третий.
Эскизы прикрепленных изображений
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Jun 6 2010, 14:33
|
Частый гость
 
Группа: Участник
Сообщений: 197
Регистрация: 8-04-05
Пользователь №: 3 977

|
Цитата(zltigo @ Jun 6 2010, 18:26)  Ответ правильный. Угадали? Теперь ответ на вопрос номер 5. И после подробнее насчет "идиотов": Неужели проверить успели? Вот это скорость...
|
|
|
|
|
Jun 6 2010, 15:16
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(vallav @ Jun 6 2010, 17:33)  Неужели проверить успели? Проверять, получать результаты и не мочь их осмыслить и понять, что удел ламеров и недоучек. Нормальные люди действуют предварительно все продумав и наверняка - знают, что делают и все задуманное получается. Посему, давайте на заданные вопросы ищите ответы. Может поможет. Но я на этом вообще-то совершенно не настаиваю - вопросы задумывались прежде всего для других форумчан. Цитата Вот это скорость... Офигительная. Настоящая машина времени - на майские праздники пришли борды и тогда-же я портировал операционку, консольку, Ethernet, загрузчик и прочее. До этого, урывками почитывал первоисточники - ну думаю в сумме не менее 40 часов. Месяц тому назад еще сутки усиленного чтения и за 3 дня вышеупомянутое было поднято. Сейчас занимаюсь другим. Дней через 10 дней продолжу.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Jun 6 2010, 15:29
|
Местный
  
Группа: Участник
Сообщений: 328
Регистрация: 23-05-08
Пользователь №: 37 760

|
Извините что вторгаюсь  . Но у меня попкорн уже кончился Цитата(vallav @ Jun 6 2010, 17:43)  Так я разве спорю. Конечно, core reads the start sp... Только как? Мое мнение, в NXP не идиоты делать это аппаратно, когда это можно с тем же успехом сделать программно в коде инициализации. Что там и делается. Я тоже думал, что бутлоадер переписывает из 0x0 константу в SP, а затем использует 0x4 как адрес перехода на пользовательскую программу. Правильно? Если не прав - поправьте меня. Цитата(vallav @ Jun 6 2010, 17:43)  Полагаете - просто на всякий случай? Код инициализации игнорирует значение 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. Хочешь знать, что есть на материнской плате и как с эим работать процессору - читай доки от производителя материнской платы. Без обид
Сообщение отредактировал Student Pupkin - Jun 6 2010, 15:49
|
|
|
|
|
Jun 6 2010, 20:51
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(Student Pupkin @ Jun 6 2010, 23:28)  програмно (переписывая константу из 0x0 в SP и выполняя переход по адресу, лежащему в 0х4)... Не вижу нималейших причин делать иначе - отмапирована только таблица векторов сам bootloader исполняется всегда на своем месте, посему просто убирает свою таблицу векторов, считывает, устанавливает и запускает. Никаких ограничений на софтовую инициализацию MSP нет. У меня точно также мой загрузчик отрабатывает, только,естественно сам целиком находясь на нулевых адресах он еще и положение таблицы векторов основной программы устанавливает.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Jun 6 2010, 21:22
|
Местный
  
Группа: Участник
Сообщений: 328
Регистрация: 23-05-08
Пользователь №: 37 760

|
А еще вопросик  - MEMMAP делает переотображение на таблицу в BOOTROM. Т.е. в том числе и чтение первых 256 байт начиная с адреса 0х0000 на самом деле будет являться чтением первых 256 байт области BOOTROM? Значит загрузчику, прежде чем начать проверку пользовательской таблицы векторов (первых 6 слов) на "валидность", необходимо сначала установить MEMMAP в 1 (User Mode)? Ведь в ином случае она недоступна? Правильно? (вопрос, чтобы просто кое-что себе в голове устаканить  ) А остальные производители микроконтроллеров на ядре Cortex-M3 тоже вместо Vector Table Offset Register используют "внешний" (по отношению к Cortex-M3) ремап?
|
|
|
|
|
Jun 7 2010, 04:31
|
Частый гость
 
Группа: Участник
Сообщений: 197
Регистрация: 8-04-05
Пользователь №: 3 977

|
Цитата(Student Pupkin @ Jun 7 2010, 01:22)  А еще вопросик  - 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. Именно она после сброса и выполняется.
|
|
|
|
|
  |
3 чел. читают эту тему (гостей: 3, скрытых пользователей: 0)
Пользователей: 0
|
|
|