|
|
  |
Переход AVR to ARM, посоветуйте с чего начать:) |
|
|
|
Oct 25 2009, 17:17
|

Профессионал
    
Группа: Участник
Сообщений: 1 620
Регистрация: 22-06-07
Из: Санкт-Петербург, Россия
Пользователь №: 28 634

|
Цитата(arm123 @ Oct 25 2009, 13:01)  2zltigo, А есть где-нибудь просторах интернета исходники какого-нибудь проекта написанного не-"студенчески"? Хочу проанализировать для общеобразовательных целей. Держите. Надеюь, из состояния писанины "студенческих" исходников я уже вырос... Хотя, возможны недоработки в плане структуры программы. Между прочим, как раз пример того, как я переходил с AVR (ATMega32) на ARM (AT91SAM7S64). Тема здесь - http://forum.cqham.ru/viewtopic.php?t=17803Для сборки ARM версии используется YAGARTO, для AVR - WinAVR.
Сообщение отредактировал Genadi Zawidowski - Oct 25 2009, 17:26
|
|
|
|
|
Oct 25 2009, 19:36
|

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

|
Цитата(aaarrr @ Oct 25 2009, 15:06)  Если бы это был Keil, то я бы так и написал. Это добро из комплекта RVDS. смотрим на тот-же файл из поставки Keil: CODE ;/*****************************************************************************/ ;/* SWI.S: SWI Handler */ ;/*****************************************************************************/ ;/* This file is part of the uVision/ARM development tools. */ ;/* Copyright © 2005-2006 Keil Software. All rights reserved. */ ;/* This software may only be used under the terms of a valid, current, */ ;/* end user licence from KEIL for a compatible version of KEIL software */ ;/* development tools. Nothing else gives you the right to use this software. */ ;/*****************************************************************************/
T_Bit EQU 0x20
PRESERVE8 ; 8-Byte aligned Stack AREA SWI_Area, CODE, READONLY ARM
EXPORT SWI_Handler SWI_Handler
STMFD SP!, {R12, LR} ; Store R12, LR MRS R12, SPSR ; Get SPSR STMFD SP!, {R8, R12} ; Store R8, SPSR TST R12, #T_Bit ; Check Thumb Bit LDRNEH R12, [LR,#-2] ; Thumb: Load Halfword BICNE R12, R12, #0xFF00 ; Extract SWI Number LDREQ R12, [LR,#-4] ; ARM: Load Word BICEQ R12, R12, #0xFF000000 ; Extract SWI Number
LDR R8, SWI_Count CMP R12, R8 BHS SWI_Dead ; Overflow ADR R8, SWI_Table LDR R12, [R8,R12,LSL #2] ; Load SWI Function Address MOV LR, PC ; Return Address BX R12 ; Call SWI Function
LDMFD SP!, {R8, R12} ; Load R8, SPSR MSR SPSR_cxsf, R12 ; Set SPSR LDMFD SP!, {R12, PC}^ ; Restore R12 and Return
SWI_Dead B SWI_Dead ; None Existing SWI
SWI_Cnt EQU (SWI_End-SWI_Table)/4 SWI_Count DCD SWI_Cnt
IMPORT __SWI_0 IMPORT __SWI_1 IMPORT __SWI_2 IMPORT __SWI_3 SWI_Table DCD __SWI_0 ; SWI 0 Function Entry DCD __SWI_1 ; SWI 1 Function Entry DCD __SWI_2 ; SWI 2 Function Entry DCD __SWI_3 ; SWI 3 Function Entry ; ... SWI_End
END
Главные отличия в свежих годах Copyright ну и естественно теперь ©Keil. Что-то я совсем не понимаю предмета спора
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Oct 25 2009, 19:58
|

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

|
Цитата(Genadi Zawidowski @ Oct 25 2009, 20:17)  Держите. Надеюь, из состояния писанины "студенческих" исходников я уже вырос... Не  "студентов" тоже писавших, например, мультиплатформенный TI стек SimpleIT в извращениях превзойти трудно  . Ну и такого типа фишки: Код if ((baud_value % 10) >= 5) baud_value = (baud_value / 10) + 1; else baud_value /= 10; Вместо: Код baud_value = ( (baud_value + 5) / 10) Вполне по-студенчески - об округлении уже знают, но с реализацией  P.S. Не принимайте близко к сердцу - выложить исходники в качестве образца, это не подвиг, но что-то героическое в этом есть! Мне такое не по силам, обычно.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Oct 25 2009, 20:04
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(zltigo @ Oct 25 2009, 22:58)  такого типа фишки Это пять  Цитата(zltigo @ Oct 25 2009, 22:58)  ...выложить исходники в качестве образца, это не подвиг, но что-то героическое в этом есть! Мне такое не по силам, обычно. Угу. Иногда хочется что-то выложить, да стыдно. Причесать можно но, лень. А с тем, за что изначально не стыдно, оказывается жалко расставаться. Вот и остается выкладывать разве что фрагменты в 10 строк максимум.
|
|
|
|
|
Oct 25 2009, 20:51
|

Профессионал
    
Группа: Участник
Сообщений: 1 620
Регистрация: 22-06-07
Из: Санкт-Петербург, Россия
Пользователь №: 28 634

|
Цитата(zltigo @ Oct 25 2009, 23:58)  Не принимайте близко к сердцу - выложить исходники в качестве образца, это не подвиг, но что-то героическое в этом есть! Мне такое не по силам, обычно. Ох ничего себе! Честно говоря, этот кусок скопипастил сам знаете откуда... Срочно поправил на Код unsigned int baud_value = main_clock / baud_rate;
return ((baud_value + 8) / 16);
|
|
|
|
|
Oct 25 2009, 21:16
|

Профессионал
    
Группа: Участник
Сообщений: 1 620
Регистрация: 22-06-07
Из: Санкт-Петербург, Россия
Пользователь №: 28 634

|
Если бы вы, как внимательные читатели, не обратили внимание на этот кусок, так бы оно и неслось по волнам истории, не опускаясь на дно... короче, чтобы закончить жизнь этого наследия, пишу так: Код const unsigned int divisor = baud_rate * 16;
return (main_clock + divisor / 2) / divisor; Интересно, поможет ли начать программировать под ARM это кому-нибудь? Прочитал про копи-пэйст. Поскольку осваивать пришлось весьма спешно, специально начал с минимального файла (единственный main и последовательность кода для ножкодрыгательства), без использования этого набора функций от атмела. Через некоторое время стала понятна идеология разработчиков периферии, уже знал что и где искать в даташите. Startup сначала был от yagarto, потом слегка переделывал.
Сообщение отредактировал Genadi Zawidowski - Oct 25 2009, 22:08
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|