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

Можно ли код откомпилированный под ARM7TDMI-S использовать в ARM720T

Есть следующий код:

#define REG8(x) (*((volatile unsigned char *)(x)))

#define REG16(x) (*((volatile unsigned short *)(x)))

#define REG32(x) (*((volatile unsigned long *)(x)))

 

typedef struct {

reg16 dr; /* Data Register */

reg16 pad0;

reg8 rsr_ecr; /* Receive Status Reg. (Read) / Error Clear Reg. (Write) */

reg8 pad1[3];

reg32 rsrvd1[4];

reg16 fr; /* Flag Register */

reg16 pad2;

reg32 rsrvd2[2];

reg16 ibrd; /* Integer Baud Rate Divisor Register */

reg16 pad3;

reg16 fbrd; /* Fractional Baud Rate Divisor Register */

reg16 pad4;

reg16 lcr_h; /* Line Control Register, High Byte */

reg16 pad5;

reg16 cr; /* Control Register */

reg16 pad6;

reg16 ifls; /* Interrupt FIFO Level Select */

reg16 pad7;

reg16 imsc; /* Interrupt Mask Set/Clear */

reg16 pad8;

reg16 ris; /* Raw Interrupt Status */

reg16 pad9;

reg16 mis; /* Masked Interrupt Status */

reg16 padA;

reg16 icr; /* Interrupt Clear Register */

reg16 padB;

reg16 dmacr; /* DMA Control Register */

reg16 padC;

} UART;

 

#define UART0 ((UART *)(UART0_BASE))

#define UART1 ((UART *)(UART1_BASE))

Не могу понять почему не прокатывает выражение типа

x=UART1.dr

Ругается на это так:

App\main.c(95): error: #154: expression must have struct or union type

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


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

x=UART1->dr;

 

 

Говорите среду кейловскую освоили и полюбили всй душой? Осталось с основами основ языка 'C' ознакомиться.

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


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

... попробую.

Пробовать не надо - сразу заработает, однако, ибо UART1 это у Вас ничто иное, как указатель на структуру.

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


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

Основные различия между ARM7TDMI и ARM720T:

- наличие встроенного сопроцессора MMU (memory management unit), наличие кеша и буфера записи.

- у ARM720T существуют дополнительные команды для работы с сопроцессорами MCR и MRC.

 

Когда MMU не включен (а он такой после сброса) ARM720T-ый камень это чистой воды ARM7TDMI.

"Послекейловские" программы работают на ура! :)

 

На сколько мне известно MMU это та штука, которая необходима для Linux и Windows CE.

На ARM720T можно запустить Windows CE.

 

Сам вплотную работаю с Cirrus Logic EP7312 и использую MMU. Ну очччень полезная штука!!!

С его помощью можно легко "перекроить" карту памяти и "сшить" так как тебе надо.

Супер-инструмент для реализации мультипотокового проекта, где каждый поток это типичная программа для ARM7.

С сопроцессором работаю на асме.

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


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

Вообщем, код откомпилированный в Keil? запускается sharp. Но есть много неприятностей. Например, когда запускаешь дебугер пишет:

*** Error: 'C:\Program Files\Keil\ARM\BIN\DARMSH.DLL' not found, или нет возможности посмотреть периферийные регистры. Вобщем, все-таки решил писать в IAR. По сему возникло несколько вопросов. Как в IAR пишется стартовый код? Где взять пару проектов, чтобы поучится и посмотреть особенности. Язык С. Инициализация на asm.

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


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

Где взять пару проектов, чтобы поучится и посмотреть особенности. Язык С. Инициализация на asm.

Как это не удивительно :), но проекты в большом количестве идут вместе с компилятором. Документы по нюансам реализации 'C' (ASM/Link/Tools/...) - тоже. Документация у IAR вполне хороша.

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


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

Ктонибудь может показать пример грамотного инициализовочного файла для IAR?

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


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

Ктонибудь может показать пример грамотного инициализовочного файла для IAR?

Грамотность startup, она, простите не компилятором определяется а решаемой задачей. Те, что в примерах лежат вполне грамотны в рамках решаемой ими задачи. Один из своих (вполне грамотно решаеющий МОИ задачи) в качестве примера соответствия версий 5.10 и 4.xx выкладывал буквально сегодня.

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


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

Обнаружил очень неприятную засаду в IAR. Суть: В других оболочках когда мне было необходимо посмотреть, что компилятор вытворил на asm, я делал так: копировал cntrl+С сишную строку, запускал дебагер, и cntrl+F cntrl+V быстро находил то место где находится сишная строка. В IAR в дебагере поика нет. Как мне быть?

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


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

необходимо посмотреть, что компилятор вытворил на asm, я делал так....

Обалденная "технология".

Вообще-то всегда и везде независимо от компилятора, отладчика, IDE, для этого просто читают листинги или сгенеренный ASM файл.

Почтайте документацию на компилятор перед сном - очень помогает.

 

P.S.

А эту тему я закрываю. Ответ на основной вопрос дан исчерпывающий.

Все остальные вопросы пошли не по теме и на уровне ветки для начинающих - просьба туда их и постить.

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


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

Гость
Эта тема закрыта для публикации ответов.
×
×
  • Создать...