реклама на сайте
подробности

 
 
> Ошибки при линковке в Кейл
Vladimir_T
сообщение May 21 2009, 17:21
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 517
Регистрация: 7-02-06
Пользователь №: 14 073



Здравствуйте, коллеги, подскажите, как устранить ошибки при линковке проекта в Кейл. Пытаюсь собрать проект с uC-FS v3.
.\List\Proj_FS.axf: Error: L6915E: Library reports error: __use_no_semihosting_swi was requested, but _sys_open was referenced
.\List\Proj_FS.axf: Error: L6915E: Library reports error: __use_no_semihosting_swi was requested, but _ttywrch was referenced
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
defunct
сообщение May 22 2009, 00:17
Сообщение #2


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Есть вот такие варианты на выбор:

1. найти и удалить все #pragma import(__use_no_semihosting_swi) и подправить зависимый от этой прагмы код.

2. использовать MicroLIB (project->options->Target->Use MicroLIB).

3. ну и самый долгий путь - в retarget.c переопределить _ttywrch как описано в хелпе (см. по ключевому слову "__use_no_semihosting_swi"), с _sys_open - сложнее, последняя потянет за собой все _sys_* функции, т.к.:
Target-dependent input and output functions use semihosting. If any function is redefined, all stream-support functions must be redefined.
Go to the top of the page
 
+Quote Post
Vladimir_T
сообщение May 22 2009, 10:06
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 517
Регистрация: 7-02-06
Пользователь №: 14 073



[quote name='defunct' date='May 22 2009, 03:17' post='596383']
Есть вот такие варианты на выбор:

1. найти и удалить все #pragma import(__use_no_semihosting_swi) и подправить зависимый от этой прагмы код.

Эта директива только в одном месте retarget.c, в нем удалил ее. Проект слинковал. Запускаю на проце, получаю зависание, похоже из sys_io по вектору dead_swi. Почему проц вылетает?
Ведь, если я правильно понимаю, FS обеспечивает обмен с картой памяти через драйвер, где и находятся низкоуровневые функции поддержки SPI. Тогда почему вызываются SWI?
Go to the top of the page
 
+Quote Post
defunct
сообщение May 22 2009, 10:22
Сообщение #4


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(Vladimir_T @ May 22 2009, 13:06) *
Ведь, если я правильно понимаю, FS обеспечивает обмен с картой памяти через драйвер, где и находятся низкоуровневые функции поддержки SPI. Тогда почему вызываются SWI?

Для первого варианта надо переопределить SWI обработчик в стартапе.
Закоментируйте
SWI_Handler B SWI_Handler
Добавьте
IMPORT SWI_Handler

или возьмите вариант с MircoLIB. Если сбилдится с MicroLIB - так будет даже лучше.


Цитата
Тогда почему вызываются SWI?

Потому что ARMLib по умолчанию дает вам STDIO через JTAG.
Go to the top of the page
 
+Quote Post
Vladimir_T
сообщение May 22 2009, 14:15
Сообщение #5


Знающий
****

Группа: Свой
Сообщений: 517
Регистрация: 7-02-06
Пользователь №: 14 073



Цитата(defunct @ May 22 2009, 14:22) *
Для первого варианта надо переопределить SWI обработчик в стартапе.
Закоментируйте
SWI_Handler B SWI_Handler
Добавьте
IMPORT SWI_Handler

Так сделал, но проц так и виснет на DEAD_SWI.
Вариант с MircoLIB сбилдится с ошибками
.\List\Proj_FS.axf: Error: L6218E: Undefined symbol __use_two_region_memory (referred from str91x_startup.o).
.\List\Proj_FS.axf: Error: L6218E: Undefined symbol __initial_sp (referred from entry.o).

Где найти и как подставить эти функции?
Go to the top of the page
 
+Quote Post
defunct
сообщение May 23 2009, 02:08
Сообщение #6


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(Vladimir_T @ May 22 2009, 17:15) *
Где найти и как подставить эти функции?

__initial_sp обычно находится в стартапе и это константа - адрес вершины стека

__use_two_region_memory см. в хелпе.

можно просто закоментировать строку
IMPORT __use_two_region_memory
Go to the top of the page
 
+Quote Post
Vladimir_T
сообщение May 23 2009, 12:25
Сообщение #7


Знающий
****

Группа: Свой
Сообщений: 517
Регистрация: 7-02-06
Пользователь №: 14 073



Цитата(defunct @ May 23 2009, 06:08) *
__initial_sp обычно находится в стартапе и это константа - адрес вершины стека


в моем стартапе такой комстанты нет. Есть только такая инициализация:

; User Initial Stack & Heap
AREA |.text|, CODE, READONLY

; IMPORT __use_two_region_memory
EXPORT __user_initial_stackheap
__user_initial_stackheap

LDR R0, = Heap_Mem
LDR R1, =(Stack_Mem + USR_Stack_Size)
LDR R2, = (Heap_Mem + Heap_Size)
LDR R3, = Stack_Mem
BX LR

ESAL_Get_Stack_Top
LDR R0, =Stack_Top
BX LR



Эта константа __initial_s (referred from entry.o).
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 22:47
Рейтинг@Mail.ru


Страница сгенерированна за 0.01416 секунд с 7
ELECTRONIX ©2004-2016