Alb 0 31 января, 2005 Опубликовано 31 января, 2005 · Жалоба Случайно наткнулся на данный форум. Сейчас я как раз занимаюсь сборкой eCos для платформы на базе LPC2294. У меня есть два вопроса : 1. Мне необходима возможность дистанционного обновления образа eCos. Соответственно вопрос RedBoot продолжает функционировать при запуске eCos? Так же непонятен процесс автоматичекого запуска Redboot-ом операционнки. 2. У меня следующая проблема RedBoot или приложение (например ping_test)откомпилированное с операционкой, запускаются исключительно с внутренней flash (стартовый адресс 0). Похоже у меня проблема с векторами прерываний, но как их изменить я не знаю. Буду благодарен за любой совет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
v_shamaev 0 31 января, 2005 Опубликовано 31 января, 2005 · Жалоба RedBoot нужен только на период отладки - основные его задачи - при старте привести контроллер в рабочее состояние (чипселекты, вайтстейты, внутренние регистры, вектора) и выйти на связь с GDB (точнее, запустить stub GDB) - и все, дальше стабом грузится ваша задача (это может быть и eCos собранный с прикладной задачей), и передается управление задаче, правда с учетом присутствия отладчика - вектора прерываний перенаправлены. Касательно места загрузки вашей задачи - это определяется в скрипте для линкера - в дистрибутиве системы - в packages/hal найдите вашу платформу, и там в include/pkgconf файлы *.h,*.lda,*.mlt для каждого варианта генерации (rom, ram, ronram) описывают модель памяти - можно подредактировать их, а можно и в сгенерированной системе - я делаю просто, *.ld стираю, а редактирую *.ldi соответствущий, после чего он make-ом восстанавливается (ldi проще). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alb 0 31 января, 2005 Опубликовано 31 января, 2005 · Жалоба 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). Может здесь присутствует какая то общая ошибка (моя естественно)? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
v_shamaev 0 31 января, 2005 Опубликовано 31 января, 2005 · Жалоба А памяти достаточно? Помнится, сходная ситуация была, когда под буфер стека IP пожадничали с выделением памяти - он там что-то много просил - это если BSD-ешный стек. А вообще припоминаю, по листу на RedHat-е - было много вопросов по отладке из RedBoot-а через Ethernet - коннект терялся. У меня в рабочей конфигурации сети нет, хотя внешний контроллер есть, но в единственный разьем вставлено внешнее ОЗУ для отладки - вместо flash. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alb 0 31 января, 2005 Опубликовано 31 января, 2005 · Жалоба Сделал дизассемблер и обнаружил следующюю вещь: 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. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
v_shamaev 0 31 января, 2005 Опубликовано 31 января, 2005 · Жалоба А просто по шагам под отладчиком? По ассемблерному, не по C? Нудно, но помогает. И стек можно посмотреть - откуда попали. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alb 0 31 января, 2005 Опубликовано 31 января, 2005 · Жалоба Если бы я умел им пользоваться....... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
v_shamaev 0 31 января, 2005 Опубликовано 31 января, 2005 · Жалоба Печально. Но не смертельно. Во-первых - есть запускаемый 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-а. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alb 0 1 февраля, 2005 Опубликовано 1 февраля, 2005 · Жалоба Спасибо за информацию, сейчас буду разбираться. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ZAA 0 14 марта, 2008 Опубликовано 14 марта, 2008 · Жалоба Скачали последнюю текущую рабочую версию ecos. До этого пытались собирать ecos 2.0. В последней же версии в hal присутствует и плата AT91SAM7xEk, которая нам больше всего подходит. Но ни одна из конфигурации (начиная от редбута, заканчивая all) не собирается. Возникают ошибки типа CPSR_USER_MODE undeclared (first use in this function) и другие подобные, в которых фигурирует этот CPSR (вроде во всех файлах, которые указаны в ошибках, это объявлено). Как можно исправить проблему? может, из старой версии надо что-то скопировать и подправить? Вопрос, где??? Очень жду ответа!!! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
axle 0 14 марта, 2008 Опубликовано 14 марта, 2008 · Жалоба Простой поиск показывает, что ... 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 забудьте. Это старье. Не думаю, что оттуда стоит что-то копировать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ZAA 0 16 марта, 2008 Опубликовано 16 марта, 2008 · Жалоба Спасибо за ответ. Вроде все нормально. Похоже, это был глюк с самим конфигтулом. Надо было, видимо, каждую новую конфигурацию под новым именем сохранять. А компилим под Линуксом. Ещё вопрос: Подскажите, пожалуйста, как написать простую программу зажигания светодиода на плате AS-Sam7x (мк AT91SAM7x256), используя функции eCos. Вроде собрали библиотеки для eCos (конфигурация default или minimal), в качестве template выбрали AT91SAM7x-EK. Скомпилировали пример (к-рый с платой поставлялся) вместе с полученными библиотеками. Бинарник прошили в мк, но, конечно, ничего не заморгало(этот пример ведь не для eCos). Где можно функции eCosовские посмотреть или может, примерчик есть у кого-нить простой? :05: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
axle 0 17 марта, 2008 Опубликовано 17 марта, 2008 · Жалоба Где можно функции eCosовские посмотреть или может, примерчик есть у кого-нить простой? :05: Примеров полно в самом репозитарии ecos. Соберите тесты (есть практически для всех пакетов) или посмотрите директорию examples. Все примеры осуществляют вывод в консоль, поэтому проверить работоспособность легко. Светодиод в ecos можно зажечь также как и в программе для МК без ОС, т.е. записать значение в порт. Ну разве, что принято использовать для этого макросы HAL_WRITE_UINT32 и HAL_READ_UINT32. Тут уже читайте документацию. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ZAA 0 17 марта, 2008 Опубликовано 17 марта, 2008 · Жалоба Ввложите. плз, если есть у кого, ссылку на exe-шник установочный для КОНФИГТУЛА под Windows (старую версию снесли, хотели новую скачать, все ссылки - на редхатовский сайт. В списке зеркал то ссылка не открывается, ошибку выдает, то при самой скачке ошибка и не грузится). Помогите, плз Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
axle 0 17 марта, 2008 Опубликовано 17 марта, 2008 · Жалоба Здесь вроде есть. Сам не скачивал, но должно работать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться