Сергей Борщ 143 10 мая, 2011 Опубликовано 10 мая, 2011 · Жалоба Неужели выходит что альтернативы указателям нет?Есть на уровне идеи. Описать в программе как extern структуры, соответствующие периферии, а адреса им назначить в скрипте или командной строке линкера. Попробуйте, отпишитесь. Я не вижу, почему не должно работать. Примерно такое:ioAT91SAM7S64.h: ..... extern AT91S_PIO PIOA; LDFLAGS += -DPIOA=0xFFFFF400 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SergeyDDD 0 10 мая, 2011 Опубликовано 10 мая, 2011 · Жалоба Есть на уровне идеи. Описать в программе как extern структуры, соответствующие периферии, а адреса им назначить в скрипте или командной строке линкера. Попробуйте, отпишитесь. Я не вижу, почему не должно работать. Не стреляет... И в заголовнике написал "extern AT91S_PIO PIOA;" В командной строке "LDFLAGS += -DPIOA=0xFFFFF400" выдает ошибку (Yagarto). Поэтому попробовал два варианта: 1. "LDFLAGS += -defsym PIOA=0xFFFFF400" 2. В скрипте линкера я указал следующее "PIOA = 0xFFFFF400;" Ни первый ни второй вариант не работают. При отладке в закладке "Expressions" символ DPIOA имеет значение "0" Или я может где то ошибся? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Petka 0 10 мая, 2011 Опубликовано 10 мая, 2011 · Жалоба Не стреляет... ИМХО тогда надо в скрипте линкера прописать эти адреса. Тогда гарантированно будет работать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Ingener001 0 10 мая, 2011 Опубликовано 10 мая, 2011 · Жалоба Вы скрипты дебаггера посмотрите. Может они портят все настройки периферии контроллера при отладке. В этом случае не в плагине дело. В том то и дело, что скрипт один и тот же в разных проектах, и в нём нет инициализации регистров кроме маппинга... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SergeyDDD 0 10 мая, 2011 Опубликовано 10 мая, 2011 · Жалоба ИМХО тогда надо в скрипте линкера прописать эти адреса. Тогда гарантированно будет работать. в скрипте я указывал адрес: "PIOA = 0xFFFFF400;" для символа в исходниках: "extern AT91S_PIO PIOA" или это делается по другому? примерчик можете накидать? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 143 10 мая, 2011 Опубликовано 10 мая, 2011 · Жалоба В командной строке "LDFLAGS += -DPIOA=0xFFFFF400" выдает ошибку (Yagarto).Да, тут я ошибся. Имел ввиду LDFLAGS+= -Wl,--defsym,PIOA=0xFFFFF400 Проверить прямо сейчас не могу. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SergeyDDD 0 11 мая, 2011 Опубликовано 11 мая, 2011 · Жалоба Да, тут я ошибся. Имел ввиду LDFLAGS+= -Wl,--defsym,PIOA=0xFFFFF400 Проверить прямо сейчас не могу. -Wl - это что за опция? На ней выдается ошибка... Ребята!!! У кого получилось - дайте знать... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 143 11 мая, 2011 Опубликовано 11 мая, 2011 · Жалоба -Wl - это что за опция?Это указание gcc передать следующую за ней опцию линкеру. На ней выдается ошибка..."ВСЕ НЕ РАБОТАЕТ!" Вы бы хоть текст ошибки приводили. Не все тут в состоянии угадать его телепатически. Если ошибка типа "неизвестная опция" - значит у вас в makefile линкер ld вызывается явно, а не посредством драйвера gcc. У кого получилось - дайте знать...Будет время - попробую. Сейчас, увы, куча работы. Пробуйте самостоятельно. Уж описание опции -Wl можно было нагуглить. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SergeyDDD 0 12 мая, 2011 Опубликовано 12 мая, 2011 · Жалоба Это указание 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 при отладке имеет нулевое значение. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Petka 0 12 мая, 2011 Опубликовано 12 мая, 2011 · Жалоба или это делается по другому? примерчик можете накидать? Да, по другому: в скрипте линкера (тот файл, что вы указываете в опциях линкера после ключа "-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; ... Пересобираем программу и наслаждаемся отладкой периферии =) Проверил код и отладку. Работает. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SergeyDDD 0 12 мая, 2011 Опубликовано 12 мая, 2011 · Жалоба 2Petka Вот спасибо!!!!! Буду пробовать Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
klen 1 16 мая, 2011 Опубликовано 16 мая, 2011 · Жалоба ..... volatile uint32_t __attribute__((section("vic"))) REG_VICSWPrioMask; ... Пересобираем программу и наслаждаемся отладкой периферии =) Проверил код и отладку. Работает. так так так...... этож я могу туда и структуры и битовые поля засунуть! и тогда отладчик будет парсить и значение битов! поробую прокрутить фарш через мясорубку.... отпишусь идея новая но косяков пока не вижу... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Petka 0 16 мая, 2011 Опубликовано 16 мая, 2011 · Жалоба так так так...... этож я могу туда и структуры и битовые поля засунуть! и тогда отладчик будет парсить и значение битов! поробую прокрутить фарш через мясорубку.... отпишусь идея новая но косяков пока не вижу... Обязательно отпишитесь о результатах. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
klen 1 18 мая, 2011 Опубликовано 18 мая, 2011 · Жалоба Обязательно отпишитесь о результатах. получилось но криво. в линкер ничего пихать не надо. я залез в объявление структуры 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 и все работает. разумется в скрипт линкера ничего сувать не требуется, он вообще тут непричем, адрес региста из дефайна берется а не из адреса секции. никакх Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ARV 1 1 июня, 2011 Опубликовано 1 июня, 2011 · Жалоба подскажите, как работать с репозиторием 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-репозиторию? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться