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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> порт под ADuC702x?
a9d
сообщение Sep 12 2010, 19:41
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 312
Регистрация: 9-04-10
Пользователь №: 56 532



Для сборки использую WinARM.

При сборке вылетает ошибка
Код
OS_Target.h    
OS_INTERRUPT void SystemTimer_ISR();     expected constructor, destructor, or type conversion before 'void'


Код
scmRTOS_defs.h  

#ifndef scmRTOS_CONTEXT_SWITCH_SCHEME
       #error "Error: Config macro scmRTOS_CONTEXT_SWITCH_SCHEME must be defined!"
#endif


Но scmRTOS_CONTEXT_SWITCH_SCHEME ведь определена по дефолту 0.

Как собрать Ос?

Все разобрался. Я с инклудами намутил.

Сообщение отредактировал a9d - Sep 12 2010, 20:21
Go to the top of the page
 
+Quote Post
a9d
сообщение Sep 12 2010, 21:47
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 312
Регистрация: 9-04-10
Пользователь №: 56 532



А каким GCC компилятором собирался порт?

У меня теперь ругается на это:
Код
undefined reference to `_exit'    test_scm2        line 0, external location: exit.c
undefined reference to `_sbrk_r'    test_scm2        line 0, external location: mallocr.c
undefined reference to `ContextRestore'    main.cpp    /test_scm2    line 0


Сообщение отредактировал a9d - Sep 12 2010, 21:49
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Sep 13 2010, 04:43
Сообщение #3


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Это на каком примере так ругается?


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
a9d
сообщение Sep 13 2010, 05:06
Сообщение #4


Местный
***

Группа: Участник
Сообщений: 312
Регистрация: 9-04-10
Пользователь №: 56 532



Это ругается на пустом проекте. (WinARM-20060606)

Стандартные примеры не собираются. Там вылетает ошибка

Код
Compiling: ../scmRTOS/Common/OS_Kernel.cpp
Compiling: ../scmRTOS/Common/OS_Services.cpp
Compiling: ../scmRTOS/Common/usrlib.cpp
Compiling: ../scmRTOS/ARM7/OS_Target_cpp.cpp
Compiling: ./Src/main.cpp
Assembling: ../scmRTOS/ARM7/OS_Target_asm.s
Assembling: ./Src/crt.s
Linking: release/1-EventFlag.elf
release/obj/crt.o: In function `ctor_end':
./Src/crt.s:157: undefined reference to `_data_image'
c:/winarm/bin/../lib/gcc/arm-elf/4.1.1/../../../../arm-elf/bin/ld.exe: BFD 06060
6 20060606 internal error, aborting at c:/winarms/binutils-060606/bfd/elflink.c
line 6509 in elf_link_output_extsym

c:/winarm/bin/../lib/gcc/arm-elf/4.1.1/../../../../arm-elf/bin/ld.exe: Please re
port this bug.

collect2: ld returned 1 exit status
make: *** [release/1-EventFlag.elf] Error 1

Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Sep 13 2010, 05:24
Сообщение #5


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Цитата(a9d @ Sep 13 2010, 11:06) *
(WinARM-20060606)

Староват наверное, компилятор-то.
Возьмите поновее. Или вот этот: Sourcery G++ Lite.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
a9d
сообщение Sep 13 2010, 09:45
Сообщение #6


Местный
***

Группа: Участник
Сообщений: 312
Регистрация: 9-04-10
Пользователь №: 56 532



Поставил Sourcery G++ Lite. Результат стал еще хуже.
Теперь в стандартных примерах ничего не собирается.
Код
Compiling: ../scmRTOS/Common/OS_Kernel.cpp
process_begin: CreateProcess(NULL, arm-elf-gcc -c -mcpu=arm7tdmi -g -gdwarf-2 -M
D -MP -MF release/dep/OS_Kernel.o.d -I../scmRTOS/Common -I../scmRTOS/ARM7 -I./Sr
c -Os -DADUC7020=1 -fomit-frame-pointer -fno-exceptions -fno-rtti -Wall -Wextra
-Wundef -Wcast-align -Wa,-ahlmsdc=release/lst/OS_Kernel.lst -fverbose-asm -ffunc
tion-sections -fdata-sections -Winline -funsigned-bitfields -fshort-enums ../scm
RTOS/Common/OS_Kernel.cpp -o release/obj/OS_Kernel.o, ...) failed.
make (e=2): Не удается найти указанный файл.
make: *** [release/obj/OS_Kernel.o] Error 2



yagarto-bu-2.20.1_gcc-4.5.1-c-c++_nl-1.18.0_gdb-7.1_eabi_20100813 выдает туже самую ошибку, что и Sourcery G++ Lite.

Сообщение отредактировал a9d - Sep 13 2010, 10:00
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Sep 13 2010, 10:19
Сообщение #7


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Дык! Надо же поменять в makefile
Код
TARGET = arm-elf-

на
Код
TARGET = arm-none-eabi-

! Компилер-то иначе называется теперьsmile.gif


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
a9d
сообщение Sep 13 2010, 10:29
Сообщение #8


Местный
***

Группа: Участник
Сообщений: 312
Регистрация: 9-04-10
Пользователь №: 56 532



Ура))) Проект собрался. Спасибо.
Капец два дня убил на компиляцию и не заметил эту мелочь.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Sep 13 2010, 15:35
Сообщение #9


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(a9d @ Sep 13 2010, 13:29) *
Ура))) Проект собрался.
Но не работает. С переходом на eabi надо в скрипте линкера строчку *(.ctors) заменить на *(.init_array) или просто добавить *(.init_array) перед или после *(.ctors)


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
a9d
сообщение Sep 13 2010, 18:42
Сообщение #10


Местный
***

Группа: Участник
Сообщений: 312
Регистрация: 9-04-10
Пользователь №: 56 532



Прошивка ,через бутлоадер, отказывается заливатся. Контроллер ADuC7024.
Вылетает ошибка:
Wrong memory address 0x10000-0x10010
Erase aborted.


В makefile выбрал
LD_SCRIPT= ./Config/ADuC70xx_FLASH.ld
и все завелось.
Но после вызова OS::Run(); управление не передается первому процессу.

Без JTAG туговато. Но с помощью светодиодов определил место где зависает.
Файл OS_Target.h
Код
INLINE inline void OS_Start(TStackItem* sp)
{

    ContextRestore(sp);
}


Не происходит возврат из ContextRestore(sp). Но учитывая атрибут __noreturn__ я могу ошибаться. Скорей всего управление передается какой нибудь функции ОС.

Сообщение отредактировал a9d - Sep 13 2010, 22:50
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Sep 14 2010, 04:58
Сообщение #11


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Цитата(a9d @ Sep 14 2010, 00:42) *
В makefile выбрал
LD_SCRIPT= ./Config/ADuC70xx_FLASH.ld

А вы внесли в ADuC70xx_FLASH.ld изменения, про которые вам сказал Сергей Борщ?

Вот сюда:
Код
        __ctors_start = .;
        *(.ctors)
        __ctors_end = .;

Добавьте после строки *(.ctors)
строку
Код
        KEEP(SORT(*)(.init_array))



--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
a9d
сообщение Sep 14 2010, 05:16
Сообщение #12


Местный
***

Группа: Участник
Сообщений: 312
Регистрация: 9-04-10
Пользователь №: 56 532



Я немного лохонулся. Строку *(.ctors) я заменил, но чуть ниже была строка KEEP(SORT(*)(.ctors)) которую я не подправил.
После внесения изменений ОС заработала.

Кстати было б неплохо еще в дистрибувах ОС указывать следующую информацию:
- версия компилятора
- MCU на котором работоспособность была испытана
- частота MCU

Нашел небольшую ошибку в примере 1-EventFlag. По умолчанию все входы в контроллерах ADuC702x настроены на вход. Поэтому если не вызвать скрипт DRIVER(LED,OUT);, работать не будет.


Не все так гладко. Когда превышаю размер dec - 3820, бутлоадер сообщает "Error at 0x12c-0x13c. Verify aborted". Код ошибки меняется в зависимости от размера.

Сообщение отредактировал a9d - Sep 14 2010, 06:13
Go to the top of the page
 
+Quote Post
a9d
сообщение Sep 14 2010, 06:46
Сообщение #13


Местный
***

Группа: Участник
Сообщений: 312
Регистрация: 9-04-10
Пользователь №: 56 532



Не знаю, что я сделал но:
Код
    __ctors_start = .;
    *(.ctors)
    *(.init_array)
    KEEP(SORT(*)(.init_array))
     __ctors_end = .;
    
     __dtors_start = .;
     *(.dtors)
     __dtors_end = .;
    KEEP(SORT(*)(.ctors))
    KEEP(SORT(*)(.init_array))
    KEEP(SORT(*)(.dtors))


и все заработало.


Снова поигрался с размером прошивки. На некоторых размерах все та же ошибка вылетает. Со скриптом все таки есть проблема.

Сообщение отредактировал a9d - Sep 14 2010, 06:52
Go to the top of the page
 
+Quote Post
a9d
сообщение Sep 14 2010, 15:48
Сообщение #14


Местный
***

Группа: Участник
Сообщений: 312
Регистрация: 9-04-10
Пользователь №: 56 532



Со скриптом все впорядке. После добавления строк *(.init_array) KEEP(SORT(*)(.init_array)) заработало. Покрайней мере три процесса мигают светодиодами.

Это я жестко облажался. Кабель COM порта долго не использовал и контакты окислились.
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Sep 14 2010, 17:09
Сообщение #15


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Цитата(a9d @ Sep 14 2010, 21:48) *
три процесса мигают светодиодами.

Поздравляю! smile.gif

2 Сергей Борщ. Почему в скрипте сделано так:
Код
    __ctors_start = .;
    *(.ctors)
    __ctors_end = .;
    KEEP(SORT(*)(.ctors))

? Я обычно пишу:
Код
    __ctors_start = .;
    KEEP(SORT(*)(.ctors))
    __ctors_end = .;

, и всё работает нормально. В чём разница между этими вариантами?


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 12th August 2025 - 01:57
Рейтинг@Mail.ru


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