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

 
 
10 страниц V  « < 3 4 5 6 7 > »   
Reply to this topicStart new topic
> EWARM 5.10
zltigo
сообщение Aug 28 2007, 21:27
Сообщение #61


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(Pasha 111 @ Aug 29 2007, 00:19) *
Там ведь 2 .exe файла?

Я понятия не имею о чем Вы говорите, сходите, на FTP, может и возьмите один файл и исправте. Ну поиском попользуйтесь, ну нельзя-же, право каждый раз по появлении очередногоо релиза из пустого в порожнее переливать....


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
_Алекс
сообщение Aug 29 2007, 06:57
Сообщение #62


Местный
***

Группа: Свой
Сообщений: 252
Регистрация: 14-09-06
Пользователь №: 20 377



Берете программу, WinHex (редактор) в нем открываете Генератор.exe, поиском ищите строчку EWARM, там смотрим рядом 06_WIN, правим на 12_WIN, сохраняем изменения и все запускаем.
Go to the top of the page
 
+Quote Post
Kitsok
сообщение Aug 29 2007, 07:39
Сообщение #63


Местный
***

Группа: Свой
Сообщений: 211
Регистрация: 9-11-06
Пользователь №: 22 136



zltigo

Вроде вчера удалось скомпилировать и запустить, но при запуске шедулера сразу возникает DataAbort, причем он меня просто вводит в ступор.

При создании задач формируются стеки этих задач, соответственно, туда кладется содержимое регистров задачи, это понятно. Первым в стек суется адрес возврата, вторым - содержимое R14 (LR), равное 0xaaaaaaaa. Остальные регистры забиваются тоже чепухой. Понятное дело, после переключения туда (в стек задачи) будут записаны реальные значения.

Потом при старте шедулера, выполняется vPortStartFirstTask, который на самом деле запрещает прерывания и вызывает portRESTORE_CONTEXT, коий я приведу тут целиком:
Код
portRESTORE_CONTEXT MACRO

; Set the LR to the task stack.                                     
    LDR        R1, =pxCurrentTCB
    LDR        R0, [R1]
    LDR        LR, [R0]

; The critical nesting depth is the first item on the stack.     
; Load it into the ulCriticalNesting variable.                     
    LDR        R0, =ulCriticalNesting
    LDMFD    LR!, {R1}
    STR        R1, [R0]

; Get the SPSR from the stack.                                     
    LDMFD    LR!, {R0}
    MSR        SPSR_cxsf, R0

; Restore all system mode registers for the task.                 
    LDMFD    LR, {R0-R14}^
    NOP

; Restore the return address.                                     
    LDR        LR, [LR, #+60]

; And return - correcting the offset in the LR to obtain the     
; correct address.                                                 
    SUBS    PC, LR, #4

    ENDM


На строке LDMFD LR, {R0-R14}^ во все регистры записывается соответствующий мусор (оно и правильно, первый запуск), а вот в LR записывается вот то самое 0xaaaaaaaa, которое было записано в стек, а не адрес возврата. Понятно, на LDR LR,[LR, #+60] мы имеем DAbort.
При этом в случае с 4.х после выполнения этой инструкции LR просто увеличивается, как ему и положено.

Вот такие чудеса.
Go to the top of the page
 
+Quote Post
alexander55
сообщение Aug 29 2007, 09:55
Сообщение #64


Бывалый
*****

Группа: Свой
Сообщений: 1 584
Регистрация: 7-08-07
Пользователь №: 29 615



Цитата(Kitsok @ Aug 29 2007, 11:39) *
zltigo

Вроде вчера удалось скомпилировать и запустить, но при запуске шедулера сразу возникает DataAbort, причем он меня просто вводит в ступор.

Не знаю, о чем речь (подозреваю о прикручивании каких-то колес), но судя тексту у Вас pxCurrentTCB не правильно инициализируется где-то выше.
Go to the top of the page
 
+Quote Post
Kitsok
сообщение Aug 29 2007, 14:58
Сообщение #65


Местный
***

Группа: Свой
Сообщений: 211
Регистрация: 9-11-06
Пользователь №: 22 136



Цитата(alexander55 @ Aug 29 2007, 13:55) *
Не знаю, о чем речь (подозреваю о прикручивании каких-то колес), но судя тексту у Вас pxCurrentTCB не правильно инициализируется где-то выше.


Речь о прикручивании FreeRTOS к новой версии wink.gif
Очень верное замечание! Раньше стек выравнивался к 4 байтам, а теперь - к 8. Буду копать, спасибо за наводку!
Go to the top of the page
 
+Quote Post
zltigo
сообщение Aug 29 2007, 15:44
Сообщение #66


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(Kitsok @ Aug 29 2007, 17:58) *
Буду копать, спасибо за наводку!

Я не знаю, куда Вы там 'закопались', но с портированием ядра FreeRTOS проблем нет. Совсем нет. Тупо за полчаса поверхностного изучения линкера и ассемблера портируется.
Поблемы вылезают, но не на банальной демке ядра.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Kitsok
сообщение Aug 29 2007, 18:03
Сообщение #67


Местный
***

Группа: Свой
Сообщений: 211
Регистрация: 9-11-06
Пользователь №: 22 136



Цитата(zltigo @ Aug 29 2007, 19:44) *
Я не знаю, куда Вы там 'закопались', но с портированием ядра FreeRTOS проблем нет. Совсем нет. Тупо за полчаса поверхностного изучения линкера и ассемблера портируется.
Поблемы вылезают, но не на банальной демке ядра.


Я тоже так подумал, поменял во всех ассемблерных исходниках имена сегментов, подставил стартап-файлы из поставки 5.10 и теперь имею реальный полтергейст с инструкцией LDMIA.

Там, где работает:
Код
ДО
SP=0xFEA4
LR=0x34EC
0x34EC-0x3527:
00 00 00 00 01 01 01 01 02 02 02 02 03 03 03 03 04 04 04 04 05 05 05 05 06 06 06 06 07 07 07 07 08 08 08 08 09 09 09 09 10 10 10 10 11 11 11 11 12 12 12 12 28 35 00 00 aa aa aa aa

portRESTORE_CONTEXT
  000001F4  E8DE7FFF  LDMIA        LR, {R0,R1,R2,R3,R4,R5,R6,R7,R8,R9,R10,R11,R12,SP,LR}^

ПОСЛЕ
SP=0xFEA4
LR=0x34EC


В новом компиляторе:
Код
ДО
SP=0x3290
LR=0x40CC
0x40CC-0x412C:
00 00 00 00 01 01 01 01 02 02 02 02 03 03 03 03 04 04 04 04 05 05 05 05 06 06 06 06 07 07 07 07 08 08 08 08 09 09 09 09 10 10 10 10 11 11 11 11 12 12 12 12 08 41 00 00 aa aa aa aa

portRESTORE_CONTEXT
  0000232C  E8DE7FFF  LDMIA        LR, {R0,R1,R2,R3,R4,R5,R6,R7,R8,R9,R10,R11,R12,SP,LR}^

ПОСЛЕ
SP=0x4108
LR=0xAAAAAAAA


Я не понимаю, почему так, буду разбираться с режимом процессора.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Aug 29 2007, 19:07
Сообщение #68


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(Kitsok @ Aug 29 2007, 21:03) *
Я тоже так подумал, поменял во всех ассемблерных исходниках имена сегментов

Совсем не обязательно - пусть будут самостоятельным сегментом, никаких проблем. Я вообще ничего не менял во FreeRTOS асмовских исходниках при переходе под 5.10
Цитата
подставил стартап-файлы из поставки 5.10

Без понятия, что там 'в поставке' - подправил свой. И линковый скрипт с чистого листа.
Цитата
Я не понимаю, почему так, буду разбираться с режимом процессора.

Я в ARM моде гоняю. Пересобрал в Thumb (при этом ядро стало больше похоже на родное, поскольку
пришлось вернутся к штатным CRITICAL_SECTION, ибо мои исключительно под ARM Mode заточены) - естественно, неизменно превосходный результат.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Kitsok
сообщение Aug 30 2007, 06:59
Сообщение #69


Местный
***

Группа: Свой
Сообщений: 211
Регистрация: 9-11-06
Пользователь №: 22 136



Цитата(zltigo @ Aug 29 2007, 23:07) *
Я в ARM моде гоняю. Пересобрал в Thumb (при этом ядро стало больше похоже на родное, поскольку
пришлось вернутся к штатным CRITICAL_SECTION, ибо мои исключительно под ARM Mode заточены) - естественно, неизменно превосходный результат.


Я про другие режимы wink.gif
Собственно, проблема обнаружилась в том, что при подходе к main() старые стартапы переводили процессор в supervisor mode, а новые в другой режим. Так что, придется разбираться в стартапах, хоть и не хотелось.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Aug 30 2007, 07:15
Сообщение #70


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(Kitsok @ Aug 30 2007, 09:59) *
Так что, придется разбираться в стартапах, хоть и не хотелось.

Огорчили sad.gif, попытками что-то писать хоть слегка не разбираясь в стартапах.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Kitsok
сообщение Aug 30 2007, 08:01
Сообщение #71


Местный
***

Группа: Свой
Сообщений: 211
Регистрация: 9-11-06
Пользователь №: 22 136



Цитата(zltigo @ Aug 30 2007, 11:15) *
Огорчили sad.gif, попытками что-то писать хоть слегка не разбираясь в стартапах.

smile.gif Ну теперь слегка разбираюсь, так что не огорчайтесь wink.gif
Go to the top of the page
 
+Quote Post
Kitsok
сообщение Aug 31 2007, 07:02
Сообщение #72


Местный
***

Группа: Свой
Сообщений: 211
Регистрация: 9-11-06
Пользователь №: 22 136



В общем, после адаптации старых стартапов к новому компилеру вроде завелось, но как-то странно.

Во-первых, пришлось в лоб в startup.s задавать начало памяти, бо раньше (поправьте если не так) можно было пользоваться именами из .xcl, а в новом - фиг, по крайней мере, у меня не получилось.

Во-вторых, не знаю почему, но в случае если таблица векторов объявляется не как b <туда-то>, а как ldr pc,[pc,#+24], и в соответствующих местах размещать b или прямо код (в случае с FIQ), то при первом-же прерывании возникает undefined instruction. Подозреваю, что что-то не так с thumb/arm, но разобраться не получилось.

В общем, поскольку этот переход затянулся, я откатился на 4.х.

На всякий случай, вот полу-рабочие стартапы и конфиг.

comments are welcome smile.gif
Прикрепленные файлы
Прикрепленный файл  new.rar ( 5.21 килобайт ) Кол-во скачиваний: 53
 
Go to the top of the page
 
+Quote Post
zltigo
сообщение Aug 31 2007, 08:04
Сообщение #73


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(Kitsok @ Aug 31 2007, 10:02) *
Во-первых...

Во-первых я свои startup и скрипрт выкладывал, причем было-стало и рабочие.
Цитата
а в новом - фиг, по крайней мере, у меня не получилось.

Нет, конечно.
Цитата
случае если таблица векторов объявляется не как b <туда-то>, а как..

Нет, конечно.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
MALLOY2
сообщение Aug 31 2007, 09:26
Сообщение #74


Знающий
****

Группа: Validating
Сообщений: 838
Регистрация: 31-01-05
Пользователь №: 2 317



Нашел 2 голюка, прошу проверить smile.gif, глюки не критичны.

1) у меня свой в проекте файл х.icf, если этот файл править из визарда в среде (я првил START ROM)и нажать save, то исчезает точка с запятой в конце файла что приводит к ошибке smile.gif, потом ручками ставить надо smile.gif


2) второй глюк связан с симулятором. У меня стратап состоит из 2 файлов, в первом инициализация стеков, памяти и переход на майн, во втором вектора прерываний и обработчики прерываний. Привожу немного кода первого файла. Всякие дефайны выкинул для экономии места.
Код
       MODULE       ?program_start
    SECTION       IRQ_STACK:DATA:NOROOT(3)
                SECTION       FIQ_STACK:DATA:NOROOT(3)
                SECTION       UND_STACK:DATA:NOROOT(3)
                SECTION       ABT_STACK:DATA:NOROOT(3)        
                SECTION       SVC_STACK:DATA:NOROOT(3)
                SECTION       CSTACK:DATA:NOROOT(3)
                SECTION    .text:CODE:NOROOT(2)
                PUBLIC     __iar_program_start
                EXTERN  ?main
                CODE32
                

__iar_program_start:
        NOP  ; execute some instructions to access CPU registers after wake
        NOP  ; up from Reset, while waiting for OSC stabilization
        NOP
        NOP
        NOP
        NOP
        NOP
        NOP
        NOP
; --- Initialize Stack pointer registers
      ; Enter each mode in turn and set up the stack pointer
           MSR     CPSR_c, #Mode_FIQ|I_Bit|F_Bit   ; No interrupts
           LDR     SP, =SFE(FIQ_STACK)

           MSR     CPSR_c, #Mode_IRQ|I_Bit|F_Bit   ; No interrupts
           LDR     SP, = SFE(IRQ_STACK)

           MSR     CPSR_c, #Mode_ABT|I_Bit|F_Bit   ; No interrupts
           LDR     SP, = SFE(ABT_STACK)
    
           MSR     CPSR_c, #Mode_UND|I_Bit|F_Bit   ; No interrupts
        LDR     SP, = SFE(UND_STACK)

           MSR     CPSR_c, #Mode_SVC|I_Bit|F_Bit   ; No interrupts
           LDR     SP, = SFE(SVC_STACK)
; --- Set bits 17-18 (DTCM/ITCM order bits) of the Core Configuration Control Register
        MOV     r0, #0x60000            
        MCR     p15,0x1,r0,c15,c1,0
; --- Now change to USR/SYS mode and set up User mode stack,
        MSR     CPSR_c, #Mode_SYS              ; IRQs & FIQs are now enabled
        LDR     SP, = SFE(CSTACK)
; --- Now enter the C code
        B       ?main   ; Note : use B not BL, because an application will
                        ; never return this way
        LTORG
        END


2 файл с векторами
Код
IMPORT  __iar_program_start
        SECTION    .intvec:CODE(2)    ;<- эта секция расположена с 0 адреса         
        CODE32
;*******************************************************************************
;                      Import exception handlers
;*******************************************************************************
        IMPORT  Undefined_Handler
        IMPORT  SWI_Handler
        IMPORT  Prefetch_Handler
        IMPORT  Abort_Handler
        IMPORT  FIQ_Handler
;*******************************************************************************
;            Export Peripherals IRQ handlers table address
;*******************************************************************************

;*******************************************************************************
;                        Exception vectors
;*******************************************************************************

        LDR     PC, Reset_Addr
        LDR     PC, Undefined_Addr
        LDR     PC, SWI_Addr
        LDR     PC, Prefetch_Addr
        LDR     PC, Abort_Addr
        NOP                            ; Reserved vector
        LDR     PC, IRQ_Addr
    LDR    PC, FIQ_Addr
;*******************************************************************************
;               Exception handlers address table
;*******************************************************************************
Reset_Addr      DCD     __iar_program_start
Undefined_Addr  DCD     UndefinedHandler
SWI_Addr        DCD     SWIHandler
Prefetch_Addr   DCD     PrefetchAbortHandler
Abort_Addr      DCD     DataAbortHandler
                DCD     0               ; Reserved vector
IRQ_Addr        DCD     IRQHandler
FIQ_Addr    DCD     FIQ_Handler       ; Branch to fiq_handler

       LTORG

       END


Глюк заключается в метке __iar_program_start, если ее переименовать на __my_start (в обеих файлах естественно smile.gif ), то в симуляторе всь код игнорируется и переход делается на __iar_program_start, правда откуда он берется загадка, но если посмотрить листинг с 0 адреса то все нормально, стоит переход на мой стартап, при загрузке проца все нормально работает, а в симуляторе код игнорируется после чего отладчик начинает ругаться что стек начинается с нулевого адреса и т.д. то есть симулятор не выполнил мой сартап код. Вот такая фишка, а может где я чего не понял ?
Go to the top of the page
 
+Quote Post
zltigo
сообщение Aug 31 2007, 09:36
Сообщение #75


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(MALLOY2 @ Aug 31 2007, 12:26) *
Глюк заключается в метке __iar_program_start

Это типа не баг,это фича sad.gif у них такая появилась - имя, блин, зарезервировали...
Тоже наступил, потом уже документ прочитал.
Цитата
правда откуда он берется загадка...

Линкуется 'готовый'.

По поводу первого бага - не скажу, визардами никогда не пользуюсь - своих ошибок, если надо, сделаю smile.gif


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post

10 страниц V  « < 3 4 5 6 7 > » 
Reply to this topicStart new topic
4 чел. читают эту тему (гостей: 4, скрытых пользователей: 0)
Пользователей: 0

 


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


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