Перейти к содержанию
    

Случайно наткнулся на данный форум.

Сейчас я как раз занимаюсь сборкой eCos для платформы на базе LPC2294.

У меня есть два вопроса :

1. Мне необходима возможность дистанционного обновления образа eCos. Соответственно вопрос RedBoot продолжает функционировать при запуске eCos? Так же непонятен процесс автоматичекого запуска Redboot-ом операционнки.

2. У меня следующая проблема RedBoot или приложение (например ping_test)откомпилированное с операционкой, запускаются исключительно с внутренней flash (стартовый адресс 0). Похоже у меня проблема с векторами прерываний, но как их изменить я не знаю.

Буду благодарен за любой совет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

RedBoot нужен только на период отладки - основные его задачи - при старте привести контроллер в рабочее состояние (чипселекты, вайтстейты, внутренние регистры, вектора)

и выйти на связь с GDB (точнее, запустить stub GDB) - и все, дальше стабом грузится ваша задача (это может быть и eCos собранный с прикладной задачей), и передается управление

задаче, правда с учетом присутствия отладчика - вектора прерываний перенаправлены.

 

Касательно места загрузки вашей задачи - это определяется в скрипте для линкера - в дистрибутиве системы - в packages/hal найдите вашу платформу, и там в include/pkgconf файлы *.h,*.lda,*.mlt для каждого варианта генерации (rom, ram, ronram) описывают модель памяти - можно подредактировать их, а можно и в сгенерированной системе - я делаю просто, *.ld стираю, а редактирую *.ldi соответствущий, после чего он make-ом восстанавливается (ldi проще).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

mlt_xxx.h и mlt_xxx.ldi файлы я редактирую, также изменяю значение HAL_PLATFORM_RESET_ENTRY, но это почему то не помогает. Не зависимо от выбранного варианта запуска программа переходит на на 0-вые адреса. Попутно хотелось бы задать следующий вопрос:

В RedBoot я использую ethernet контроллер. При запуске приложения в котором не используется ethernet всё работает. Для примера:

 

+... waiting for BOOTP information

Ethernet eth0: MAC address 08:88:12:34:56:78

IP: 10.0.0.41/255.255.252.0, Gateway: 10.0.0.5

Default server: 10.0.1.10

 

RedBoot bootstrap and debug environment [ROM]

Non-certified release, version UNKNOWN - built 15:57:02, Jan 27 2005

 

Platform: ALBATROS MP9 PLC board (ARM7TDMI-S)

Copyright © 2000, 2001, 2002, 2003, 2004 Red Hat, Inc.

 

RAM: 0x81000000-0x81200000, [0x8100a0a0-0x811ed000] available

FLASH: 0x80000000 - 0x80400000, 64 blocks of 0x00010000 bytes each.

== Executing boot script in 5.000 seconds - enter ^C to abort

*[cyg_net_init] Init: mbinit(0x00000000)

[cyg_net_init] Init: cyg_net_init_devs(0x00000000)

Init device 'cs8900a_eth0'

[cyg_net_init] Init: loopattach(0x00000000)

[cyg_net_init] Init: ifinit(0x00000000)

[cyg_net_init] Init: domaininit(0x00000000)

[cyg_net_init] Init: cyg_net_add_domain(0x81000ca4)

New domain internet at 0x00000000

[cyg_net_init] Init: cyg_net_add_domain(0x81000774)

New domain route at 0x00000000

[cyg_net_init] Init: call_route_init(0x00000000)

[cyg_net_init] Done

Hello, eCos world!

 

Если в приложение добавить:

int main(void)

{

printf("Hello, eCos world!\n");

///////////////////////////////////////////////

init_all_network_interfaces();

while(1);

}

 

То при вызове init_all_network_interfaces(); просходит перезапуск программы.

Хотя если нет Redboot всё работает без проблем (правда тогда прложение находится во внутренней flash).

 

Может здесь присутствует какая то общая ошибка (моя естественно)?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А памяти достаточно? Помнится, сходная ситуация была, когда под буфер стека IP пожадничали с выделением памяти - он там что-то много просил - это если BSD-ешный

стек. А вообще припоминаю, по листу на RedHat-е - было много вопросов по отладке из

RedBoot-а через Ethernet - коннект терялся. У меня в рабочей конфигурации сети нет, хотя

внешний контроллер есть, но в единственный разьем вставлено внешнее ОЗУ для отладки -

вместо flash.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Сделал дизассемблер и обнаружил следующюю вещь:

 

Disassembly of section .rom_vectors:

 

80000000 <__exception_handlers>:

80000000: ea00000e b 80000040 <_stext>

80000004: e59ff018 ldr pc, [pc, #24] ; 80000024 <.undefined_instruction>

80000008: e59ff018 ldr pc, [pc, #24] ; 80000028 <.software_interrupt>

8000000c: e59ff018 ldr pc, [pc, #24] ; 8000002c <.abort_prefetch>

80000010: e59ff018 ldr pc, [pc, #24] ; 80000030 <.abort_data>

80000014: 00000000 andeq r0, r0, r0

80000018: e59ff018 ldr pc, [pc, #24] ; 80000038 <.IRQ>

8000001c: e59ff018 ldr pc, [pc, #24] ; 8000003c <.FIQ>

 

00000000 <__exception_handlers>:

0: ea00000e b 40 <_stext>

4: e59ff018 ldr pc, [pc, #24] ; 24 <armreg_r9>

8: e59ff018 ldr pc, [pc, #24] ; 28 <armreg_r10>

c: e59ff018 ldr pc, [pc, #24] ; 2c <armreg_fp>

10: e59ff018 ldr pc, [pc, #24] ; 30 <armreg_ip>

14: 00000000 andeq r0, r0, r0

18: e59ff018 ldr pc, [pc, #24] ; 38 <armreg_lr>

1c: e59ff018 ldr pc, [pc, #24] ; 3c <armreg_pc>

 

Как видно описание переходов абсолютно одинаковое.

Кто нибудь знает -- у LPC22xx счетчик команд равен при попадании на вектор равен 0 или адресу собласти на которую производится mapping.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А просто по шагам под отладчиком? По ассемблерному, не по C? Нудно, но помогает.

И стек можно посмотреть - откуда попали.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Печально. Но не смертельно. Во-первых - есть запускаемый Insight? он называется arm-elf-insight, или бывает вариант arm-elf-gdb с ключом -w, если запускается - дальше просто - подключенный через com-порт или через ethernet (сложнее) RedBoot на целевой

машине - в Insight-е в меню target setting выбираем вариант подключения - remote serial или

remote TCP. Вообще, для начала стоит посмотреть книжку Antony J. Massa "Embedded Software Development with eCos", ссылку я в этой дискуссии раньше давал, там на стр. 305 все подробно написано - а дальше довольно просто - пошаговая отладка через иконки доступна, там есть как по коду на c, так и по машиннам командам. Стек можно посмотреть, вызвав окно. И пройти назад по цепочек вызовов. Рекомендация - инструментарием пользоватся только патченым в соответствии с указаниями на сайте eCos-centric-а.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Скачали последнюю текущую рабочую версию ecos. До этого пытались собирать ecos 2.0. В последней же версии в hal присутствует и плата AT91SAM7xEk, которая нам больше всего подходит. Но ни одна из конфигурации (начиная от редбута, заканчивая all) не собирается. Возникают ошибки типа CPSR_USER_MODE undeclared (first use in this function) и другие подобные, в которых фигурирует этот CPSR (вроде во всех файлах, которые указаны в ошибках, это объявлено). Как можно исправить проблему? может, из старой версии надо что-то скопировать и подправить? Вопрос, где??? Очень жду ответа!!!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Простой поиск показывает, что ...

grep -r CPSR_USER_MODE ./
./hal/arm/arch/current/src/hal_mk_defs.c:    DEFINE(CPSR_USER_MODE, CPSR_USER_MODE);
./hal/arm/arch/current/src/vectors.S:        cmp     r2, #CPSR_USER_MODE
./hal/arm/arch/current/src/vectors.S:        cmp     r2, #CPSR_USER_MODE
./hal/arm/arch/current/src/vectors.S:        cmp     r2, #CPSR_USER_MODE
./hal/arm/arch/current/include/hal_arch.h:#define CPSR_USER_MODE                0x10
./hal/arm/arch/current/ChangeLog:       * include/hal_arch.h: Defined CPSR_USER_MODE.
./hal/arm/arch/current/ChangeLog:       * src/hal_mk_defs.c.: Added definition for CPSR_USER_MODE.

CPSR_USER_MODE объявлен в hal_arch.h и просто не может быть undeclared при корректной сборке для ARM. Наверно ошибки в конфигурировании. Пока посоветовать ничего не могу, есть только вопросы.

Как вы конфигурируете ecos? Какие пакеты входят в конфигурацию? Какой компилятор? Windows или linux?

 

Про ecos 2.0 забудьте. Это старье. Не думаю, что оттуда стоит что-то копировать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо за ответ. Вроде все нормально. Похоже, это был глюк с самим конфигтулом. Надо было, видимо, каждую новую конфигурацию под новым именем сохранять. А компилим под Линуксом.

Ещё вопрос:

Подскажите, пожалуйста, как написать простую программу зажигания светодиода на плате AS-Sam7x (мк AT91SAM7x256), используя функции eCos. Вроде собрали библиотеки для eCos (конфигурация default или minimal), в качестве template выбрали AT91SAM7x-EK. Скомпилировали пример (к-рый с платой поставлялся) вместе с полученными библиотеками. Бинарник прошили в мк, но, конечно, ничего не заморгало(этот пример ведь не для eCos). Где можно функции eCosовские посмотреть или может, примерчик есть у кого-нить простой? :05:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Где можно функции eCosовские посмотреть или может, примерчик есть у кого-нить простой? :05:

Примеров полно в самом репозитарии ecos. Соберите тесты (есть практически для всех пакетов) или посмотрите директорию examples. Все примеры осуществляют вывод в консоль, поэтому проверить работоспособность легко.

Светодиод в ecos можно зажечь также как и в программе для МК без ОС, т.е. записать значение в порт. Ну разве, что принято использовать для этого макросы HAL_WRITE_UINT32 и HAL_READ_UINT32. Тут уже читайте документацию.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ввложите. плз, если есть у кого, ссылку на exe-шник установочный для КОНФИГТУЛА под Windows (старую версию снесли, хотели новую скачать, все ссылки - на редхатовский сайт. В списке зеркал то ссылка не открывается, ошибку выдает, то при самой скачке ошибка и не грузится). Помогите, плз :help:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...