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

 
 
51 страниц V  « < 28 29 30 31 32 > »   
Reply to this topicStart new topic
> Вопросы по Eclipse, CDT, Zylin embedded CDT, предлагаю обсуждать тут, может потом FAQ выжмем
Сергей Борщ
сообщение May 10 2011, 10:49
Сообщение #436


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (SergeyDDD @ May 10 2011, 12:08) *
Неужели выходит что альтернативы указателям нет?
Есть на уровне идеи. Описать в программе как extern структуры, соответствующие периферии, а адреса им назначить в скрипте или командной строке линкера. Попробуйте, отпишитесь. Я не вижу, почему не должно работать. Примерно такое:
CODE
ioAT91SAM7S64.h:
.....

extern AT91S_PIO PIOA;


LDFLAGS += -DPIOA=0xFFFFF400



--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
SergeyDDD
сообщение May 10 2011, 13:40
Сообщение #437


Местный
***

Группа: Свой
Сообщений: 231
Регистрация: 7-12-06
Из: Киев
Пользователь №: 23 248



Цитата(Сергей Борщ @ May 10 2011, 13:49) *
Есть на уровне идеи. Описать в программе как extern структуры, соответствующие периферии, а адреса им назначить в скрипте или командной строке линкера. Попробуйте, отпишитесь. Я не вижу, почему не должно работать.


Не стреляет...
И в заголовнике написал "extern AT91S_PIO PIOA;"
В командной строке "LDFLAGS += -DPIOA=0xFFFFF400" выдает ошибку (Yagarto).
Поэтому попробовал два варианта:
1. "LDFLAGS += -defsym PIOA=0xFFFFF400"
2. В скрипте линкера я указал следующее "PIOA = 0xFFFFF400;"

Ни первый ни второй вариант не работают.
При отладке в закладке "Expressions" символ DPIOA имеет значение "0"
Или я может где то ошибся?
Go to the top of the page
 
+Quote Post
Petka
сообщение May 10 2011, 14:02
Сообщение #438


Профессионал
*****

Группа: Свой
Сообщений: 1 453
Регистрация: 23-08-05
Пользователь №: 7 886



Цитата(SergeyDDD @ May 10 2011, 17:40) *
Не стреляет...

ИМХО тогда надо в скрипте линкера прописать эти адреса. Тогда гарантированно будет работать.
Go to the top of the page
 
+Quote Post
Ingener001
сообщение May 10 2011, 14:04
Сообщение #439





Группа: Новичок
Сообщений: 3
Регистрация: 30-09-09
Пользователь №: 52 656



Цитата(SergeyDDD @ May 10 2011, 12:42) *
Вы скрипты дебаггера посмотрите.
Может они портят все настройки периферии контроллера при отладке.
В этом случае не в плагине дело.


В том то и дело, что скрипт один и тот же в разных проектах, и в нём нет инициализации регистров кроме маппинга...
Go to the top of the page
 
+Quote Post
SergeyDDD
сообщение May 10 2011, 14:47
Сообщение #440


Местный
***

Группа: Свой
Сообщений: 231
Регистрация: 7-12-06
Из: Киев
Пользователь №: 23 248



Цитата(Petka @ May 10 2011, 17:02) *
ИМХО тогда надо в скрипте линкера прописать эти адреса. Тогда гарантированно будет работать.


в скрипте я указывал адрес: "PIOA = 0xFFFFF400;"
для символа в исходниках: "extern AT91S_PIO PIOA"

или это делается по другому?
примерчик можете накидать?
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение May 10 2011, 17:28
Сообщение #441


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (SergeyDDD @ May 10 2011, 16:40) *
В командной строке "LDFLAGS += -DPIOA=0xFFFFF400" выдает ошибку (Yagarto).
Да, тут я ошибся. Имел ввиду LDFLAGS+= -Wl,--defsym,PIOA=0xFFFFF400
Проверить прямо сейчас не могу.



--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
SergeyDDD
сообщение May 11 2011, 05:33
Сообщение #442


Местный
***

Группа: Свой
Сообщений: 231
Регистрация: 7-12-06
Из: Киев
Пользователь №: 23 248



Цитата(Сергей Борщ @ May 10 2011, 20:28) *
Да, тут я ошибся. Имел ввиду LDFLAGS+= -Wl,--defsym,PIOA=0xFFFFF400
Проверить прямо сейчас не могу.


-Wl - это что за опция?
На ней выдается ошибка...

Ребята!!!
У кого получилось - дайте знать...
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение May 11 2011, 07:31
Сообщение #443


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (SergeyDDD @ May 11 2011, 08:33) *
-Wl - это что за опция?
Это указание gcc передать следующую за ней опцию линкеру.
QUOTE (SergeyDDD @ May 11 2011, 08:33) *
На ней выдается ошибка...
"ВСЕ НЕ РАБОТАЕТ!" lol.gif Вы бы хоть текст ошибки приводили. Не все тут в состоянии угадать его телепатически. Если ошибка типа "неизвестная опция" - значит у вас в makefile линкер ld вызывается явно, а не посредством драйвера gcc.
QUOTE (SergeyDDD @ May 11 2011, 08:33) *
У кого получилось - дайте знать...
Будет время - попробую. Сейчас, увы, куча работы. Пробуйте самостоятельно. Уж описание опции -Wl можно было нагуглить.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
SergeyDDD
сообщение May 12 2011, 06:05
Сообщение #444


Местный
***

Группа: Свой
Сообщений: 231
Регистрация: 7-12-06
Из: Киев
Пользователь №: 23 248



Цитата(Сергей Борщ @ May 11 2011, 10:31) *
Это указание gcc передать следующую за ней опцию линкеру.
Если ошибка типа "неизвестная опция" - значит у вас в makefile линкер ld вызывается явно, а не посредством драйвера gcc
Уж описание опции -Wl можно было нагуглить.

Спасибо понял.
Я действительно в make прописал линковку через ld и соответственно опцию -Wl искал в документации по линкеру LD.

Описание символа следующее:
extern AT91S_PIO PIOA;

Командная строка ликера выглядит так:
arm-none-eabi-ld -Map Output.map -TOutput_RAM.ld -defsym PIOA=0xFFFFF400 -o Output.out Startup.o AppMain.o

Тем не менее символ PIOA при отладке имеет нулевое значение.
Go to the top of the page
 
+Quote Post
Petka
сообщение May 12 2011, 07:04
Сообщение #445


Профессионал
*****

Группа: Свой
Сообщений: 1 453
Регистрация: 23-08-05
Пользователь №: 7 886



Цитата(SergeyDDD @ May 10 2011, 18:47) *
или это делается по другому?
примерчик можете накидать?

Да, по другому:
в скрипте линкера (тот файл, что вы указываете в опциях линкера после ключа "-T") добавляете секцию:
Код
/* Memory Definitions */                                                                        
MEMORY                                                                                          
{                                                                                              
  FLASH  (rx) : ORIGIN = 0x00000000, LENGTH = 0x00080000                                        
  RAM    (rw) : ORIGIN = 0x40000000, LENGTH = 0x00010000                                        
  USBRAM (rw) : ORIGIN = 0x7FD00000, LENGTH = 0x00004000                                        
  ETHRAM (rw) : ORIGIN = 0x7FE00000, LENGTH = 0x00004000                                        
  RTCRAM (rw) : ORIGIN = 0xE0084000, LENGTH = 0x00000800                                        
  /* Добавим ниже область памяти с периферией. В моём случае в качестве периферии будет контроллер VIC */
  VIC    (rw) : ORIGIN = 0xFFFFF000, LENGTH = 0x00000FFF                                        

}

....
....
....

/* Section Definitions */                                                                      
                                                                                                
SECTIONS                                                                                        
{                                                                                              
  /* В описании секций добавим секцию где будут размещаться регистры периферии VIC */
  vic (NOLOAD):                                                                                
  {                                                                                            
    *(vic)                                                                                      
  } > VIC                                                                                      
  /* Указываем что секция размещается в области памяти, принадлежащей VIC */

....
....
....


Далее в коде программы описывем регистры:

Код
....
#include <stdint.h>
....
/* Описываем регистры, и указываем что они размещены в секции "vic" */
volatile uint32_t __attribute__((section("vic"))) REG_VICIRQStatus;                            
volatile uint32_t __attribute__((section("vic"))) REG_VICFIQStatus;                            
volatile uint32_t __attribute__((section("vic"))) REG_VICRawIntr;                              
volatile uint32_t __attribute__((section("vic"))) REG_VICIntSelect;                            
volatile uint32_t __attribute__((section("vic"))) REG_VICIntEnable;                            
volatile uint32_t __attribute__((section("vic"))) REG_VICIntEnClr;                              
volatile uint32_t __attribute__((section("vic"))) REG_VICSoftInt;                              
volatile uint32_t __attribute__((section("vic"))) REG_VICSoftIntClr;                            
volatile uint32_t __attribute__((section("vic"))) REG_VICProtection;                            
volatile uint32_t __attribute__((section("vic"))) REG_VICSWPrioMask;                            
...


Пересобираем программу и наслаждаемся отладкой периферии =)
Проверил код и отладку. Работает.
Go to the top of the page
 
+Quote Post
SergeyDDD
сообщение May 12 2011, 07:42
Сообщение #446


Местный
***

Группа: Свой
Сообщений: 231
Регистрация: 7-12-06
Из: Киев
Пользователь №: 23 248



2Petka

Вот спасибо!!!!!
Буду пробовать
Go to the top of the page
 
+Quote Post
klen
сообщение May 16 2011, 06:27
Сообщение #447


бессмертным стать можно тремя способами
*****

Группа: Свой
Сообщений: 1 405
Регистрация: 9-05-06
Из: Москва
Пользователь №: 16 912



Цитата(Petka @ May 12 2011, 11:04) *
.....
volatile uint32_t __attribute__((section("vic"))) REG_VICSWPrioMask;
...
Пересобираем программу и наслаждаемся отладкой периферии =)
Проверил код и отладку. Работает.


так так так...... этож я могу туда и структуры и битовые поля засунуть! и тогда отладчик будет парсить и значение битов! поробую прокрутить фарш через мясорубку.... отпишусь
идея новая но косяков пока не вижу...
Go to the top of the page
 
+Quote Post
Petka
сообщение May 16 2011, 08:28
Сообщение #448


Профессионал
*****

Группа: Свой
Сообщений: 1 453
Регистрация: 23-08-05
Пользователь №: 7 886



Цитата(klen @ May 16 2011, 10:27) *
так так так...... этож я могу туда и структуры и битовые поля засунуть! и тогда отладчик будет парсить и значение битов! поробую прокрутить фарш через мясорубку.... отпишусь
идея новая но косяков пока не вижу...

Обязательно отпишитесь о результатах.
Go to the top of the page
 
+Quote Post
klen
сообщение May 18 2011, 08:31
Сообщение #449


бессмертным стать можно тремя способами
*****

Группа: Свой
Сообщений: 1 405
Регистрация: 9-05-06
Из: Москва
Пользователь №: 16 912



Цитата(Petka @ May 16 2011, 12:28) *
Обязательно отпишитесь о результатах.


получилось но криво. в линкер ничего пихать не надо.
я залез в объявление структуры DAC_TypeDef (stm32f10x.h)

если компилировать с помощью c++ то проблен нет вообще

заменяем объявление поля структуры на (пример для регистра СR ЦАПа)
Код
typedef struct
{
  __IO uint32_t CR;
  __IO uint32_t SWTRIGR;
  __IO uint32_t DHR12R1;
  .....
} DAC_TypeDef;

на
Код
typedef struct
{
    union CR {
      __IO uint32_t val;
        struct
                  {
                    uint32_t EN1 : 1;
                    uint32_t BOFF1 : 1;
                    uint32_t TEN1 : 1;
                    uint32_t TSEL1 : 3;
                    uint32_t WAWE1 : 2;
                    uint32_t MAMP1 : 4;
                    uint32_t DMAEN1 : 1;
                    uint32_t Reserve1 : 3;

                    uint32_t EN2 : 1;
                    uint32_t BOFF2 : 1;
                    uint32_t TEN2 : 1;
                    uint32_t TSEL2 : 3;
                    uint32_t WAWE2 : 2;
                    uint32_t MAMP2 : 4;
                    uint32_t DMAEN2 : 1;
                    uint32_t Reserve2 : 3;
                  } CR_BITS;
                CR& operator= (const uint32_t src) { val = src; return *this; }
        };
  __IO uint32_t SWTRIGR;
  __IO uint32_t DHR12R1;
  .....
} DAC_TypeDef;


итогом становится то что двойное слово теперь интерпретируется как битовое поле объедененное с этим словом. отладчик бодро отрисовывает содержание полей.
в этом способе есть ложка дегтя - посколькоу __IO uint32_t CR превратился в enum {...} то в коде использующем DAC_TypeDef операция DAC->CR=XXX будет неактуальна, потому что нельзя присвоить целого типа в объект объединения типа, поэтому приходится перегрузит операцию присваивания с помощью CR& operator= (const uint32_t src). Это сразуже ствит крест на возможности скомпилировать с помощю компилятора С.

теперь вариант с компиллером С. в принципе можно объявить структуру анонимной без перегрузки присваивания но уже с полем __IO uint32_t CR :
Код
typedef struct
{
        union {
      __IO uint32_t CR;
        struct
                  {
                    uint32_t EN1 : 1;
                    uint32_t BOFF1 : 1;
                    uint32_t TEN1 : 1;
                    uint32_t TSEL1 : 3;
                    uint32_t WAWE1 : 2;
                    uint32_t MAMP1 : 4;
                    uint32_t DMAEN1 : 1;
                    uint32_t Reserve1 : 3;

                    uint32_t EN2 : 1;
                    uint32_t BOFF2 : 1;
                    uint32_t TEN2 : 1;
                    uint32_t TSEL2 : 3;
                    uint32_t WAWE2 : 2;
                    uint32_t MAMP2 : 4;
                    uint32_t DMAEN2 : 1;
                    uint32_t Reserve2 : 3;
                  } CR_BITS;
        };
  __IO uint32_t SWTRIGR;
  __IO uint32_t DHR12R1;
  .....
} DAC_TypeDef;


в этом случае DAC->CR=XXX проходит естественно на ура но..... отладчик теперь не знает имени объединения , потому что его нет - оно анонимное. приплыли.

если на то что нада периписать все обращения вызовы DAC->CR=XXX на DAC->CR.val = XXX закрыть глаза ( например библиотечные где уже с этим регистром чтото делается ) то проблем вообще нет - в данном случае называем объединение конкретным именем CR и все работает.
разумется в скрипт линкера ничего сувать не требуется, он вообще тут непричем, адрес региста из дефайна берется а не из адреса секции.

никакх
Go to the top of the page
 
+Quote Post
ARV
сообщение Jun 1 2011, 07:04
Сообщение #450


Профессионал
*****

Группа: Свой
Сообщений: 1 143
Регистрация: 30-09-08
Из: Новочеркасск
Пользователь №: 40 581



подскажите, как работать с репозиторием Google Code?
я сделал следующее:
1. создал проект на code.google.com
2. скачал и установил Subclipse плагин к Eclipse
теперь пробую сделать для своего проекта Team - Share Project: в появляющемся оконце ввожу то, что написано в закладке Source в интерфейсе code.google.com (это примерно такое: https://my-project.googlecode.com/svn/trunk/ my_project --username my_name@my_post.com) - получаю в итоге ошибку "Затребованное имя допустимо и оно найдено в базе данных, но для имени отсутствуют связанные с ним даные"... что это значит? когда и где вводится пароль на запись в репозиторий? как вообще правильно подключаться к SVN-репозиторию?


--------------------
Я бы взял частями... но мне надо сразу.
Go to the top of the page
 
+Quote Post

51 страниц V  « < 28 29 30 31 32 > » 
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 04:07
Рейтинг@Mail.ru


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