|
Портирование кода с ПК на ARM926 |
|
|
|
Oct 6 2014, 10:51
|
Местный
  
Группа: Участник
Сообщений: 338
Регистрация: 1-02-06
Из: Королев, М.О.
Пользователь №: 13 846

|
Цитата(AlexandrY @ Oct 6 2014, 14:26)  А как тогда ваша библиотека стыкуется к основному образу ПО? Сразу все линкуется вместе с вашей библиотекой на стадии компиляции или библиотека компилируется отдельно и потом динамически загружается и связывается с основным ПО уже на стадии исполнения?
Может просто перекомпилировать весь образ надо. Я работаю не с образом ПО, а с исходниками. Т.е. я добавляю в исходники новые файлы со своим процессом, а потом все вместе компилируется. Что меня больше всего смущает - Fatal Error происходит не в моем процессе, а каком-то глубоко системном (от него даже исходников нет, только заголовки). Судя по имени обработчика IxTimeOfDay_IPC_Server(), это что-то связанное с часами реального времени.
--------------------
-Да как так-то?/-Да как-то так/-Ну так-то да
|
|
|
|
|
Oct 6 2014, 11:49
|

Ally
     
Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050

|
Цитата(Harvester @ Oct 6 2014, 13:51)  Я работаю не с образом ПО, а с исходниками. Т.е. я добавляю в исходники новые файлы со своим процессом, а потом все вместе компилируется.
Что меня больше всего смущает - Fatal Error происходит не в моем процессе, а каком-то глубоко системном (от него даже исходников нет, только заголовки). Судя по имени обработчика IxTimeOfDay_IPC_Server(), это что-то связанное с часами реального времени. А как узнали имя функции в которой прооисходит аборт? И как понимаю работаете с скомпилированным ядром в виде библиотеки и перекомпилировать его не можете, раз одни только хидеры имеете. Больше похоже на сбой стека. Либо стек для процесса маленький, либо в стек ложится меньше данных чем и из него выбирается. Поэтому процессор берет неверный адрес возврата и оказывается в непредсказуемом месте. Тут надо проверить контекст какой задачи был на момент аборта. Если контекст вашей задачи , то очень вероятен сбой в работе со стеком. Может некорректно используете функции с открытыми параметрами?
|
|
|
|
|
Oct 6 2014, 13:19
|
Местный
  
Группа: Участник
Сообщений: 338
Регистрация: 1-02-06
Из: Королев, М.О.
Пользователь №: 13 846

|
Цитата(AlexandrY @ Oct 6 2014, 15:49)  А как узнали имя функции в которой прооисходит аборт?
И как понимаю работаете с скомпилированным ядром в виде библиотеки и перекомпилировать его не можете, раз одни только хидеры имеете.
Больше похоже на сбой стека. Либо стек для процесса маленький, либо в стек ложится меньше данных чем и из него выбирается. Поэтому процессор берет неверный адрес возврата и оказывается в непредсказуемом месте. Тут надо проверить контекст какой задачи был на момент аборта. Если контекст вашей задачи , то очень вероятен сбой в работе со стеком. Может некорректно используете функции с открытыми параметрами? В сценарии отладчика предусмотрена аппаратная точка останова на функции err_fatal_put_internal(), один из параметров которой - строка с внутренним именем процесса и видом ошибки. Про стек тоже думал. Увеличил в разумных пределах, ничего не менялось. Вобщем, нет у меня доверия этой библиотеке. Попробую найти альтернативные реализации алгоритма
--------------------
-Да как так-то?/-Да как-то так/-Ну так-то да
|
|
|
|
|
Oct 6 2014, 13:52
|
Местный
  
Группа: Участник
Сообщений: 338
Регистрация: 1-02-06
Из: Королев, М.О.
Пользователь №: 13 846

|
Цитата(kovigor @ Oct 6 2014, 17:35)  Просто совет, основанный на личном опыте. Я использовал вот эту библиотеку ( bnlib) от Филиппа Зиммермана: http://philzimmermann.com/EN/bnlib/index.htmlСпасибо, буду иметь в виду.
--------------------
-Да как так-то?/-Да как-то так/-Ну так-то да
|
|
|
|
|
Oct 6 2014, 14:13
|

Ally
     
Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050

|
Цитата(kovigor @ Oct 6 2014, 16:35)  Просто совет, основанный на личном опыте. Я использовал вот эту библиотеку ( bnlib) от Филиппа Зиммермана: http://philzimmermann.com/EN/bnlib/index.htmlАрифметика произвольной точности есть в любой реализации SSL. Можно взять уже адаптированную для embedded библиотеку, например из MatrixSSL. Все в одном файле, компактно, без нагромаждения архитектур.
|
|
|
|
|
Oct 6 2014, 14:28
|
Местный
  
Группа: Участник
Сообщений: 338
Регистрация: 1-02-06
Из: Королев, М.О.
Пользователь №: 13 846

|
Цитата(AlexandrY @ Oct 6 2014, 18:13)  Арифметика произвольной точности есть в любой реализации SSL. Можно взять уже адаптированную для embedded библиотеку, например из MatrixSSL. Все в одном файле, компактно, без нагромаждения архитектур. Спасибо. Разберусь с текущей задачей - буду изучать
--------------------
-Да как так-то?/-Да как-то так/-Ну так-то да
|
|
|
|
|
Oct 6 2014, 15:07
|
Знающий
   
Группа: Свой
Сообщений: 549
Регистрация: 13-07-10
Из: Солнечногорск-7
Пользователь №: 58 414

|
Цитата(jcxz @ Oct 5 2014, 19:34)  Не очень понятно, как MMU повлияет на быстродействие... Раскройте секрет.  Причина в том, что во многих АРМовских процессорных ядрах, в том числе на ARM926, кэш данных может работать только при включённом MMU. Соответственно, если MMU выключено, кэш данных не работает и любое обращение к памяти реально обращается к памяти  А это, понятное дело, -- большие задержки. Поэтому, даже если виртуальная память совершенно не нужна, крайне рекомендуется включать MMU, заполнив переадресации таким образом, чтобы виртуальные адреса просто совпадали с физическими, а защита не использовалась.
|
|
|
|
|
Oct 6 2014, 17:11
|
Гуру
     
Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713

|
Цитата(SII @ Oct 6 2014, 21:07)  Причина в том, что во многих АРМовских процессорных ядрах, в том числе на ARM926, кэш данных может работать только при включённом MMU. Соответственно, если MMU выключено, кэш данных не работает и любое обращение к памяти реально обращается к памяти  А это, понятное дело, -- большие задержки. Поэтому, даже если виртуальная память совершенно не нужна, крайне рекомендуется включать MMU, заполнив переадресации таким образом, чтобы виртуальные адреса просто совпадали с физическими, а защита не использовалась. Да, пожалуй Вы правы: Открываем TRM на ARM926EJ-S раздел "Caches and Write Buffer": Table 4-3 CP15 c1 C and M bit settings for the DCache C bit/M bit____ARM926EJ-S behavior ... 1/0______DCache enabled, MMU disabled. The C bit is overridden by the M bit setting, so that the DCache is _________effectively disabled. All data accesses are noncacheable, nonbufferable, with no protection checks. All _________addresses are flat mapped, that is VA = MVA = PA. ...
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|