BlackOps 0 27 января, 2012 Опубликовано 27 января, 2012 · Жалоба Использую под Линукс: Eclipse + GNU ARM PLUGIN + CodeSourcery LITE скачал с сайта ST следующие файлы, и включил их в проект: core_cm3.h startup_stm32f10x_hd.s stm32f10x.h system_stm32f10x.h и добавил еще вот такой линкер скрипт: MEMORY { sram (W!RX) : ORIGIN = 0x20000000, LENGTH = 64k flash (RX) : ORIGIN = 0x08000000, LENGTH = 512k } SECTIONS { .text : { . = ALIGN(4); _text = .; PROVIDE(stext = .); KEEP(*(.isr_vector)) KEEP(*(.init)) *(.text .text.*) *(.rodata .rodata.*) *(.gnu.linkonce.t.*) *(.glue_7) *(.glue_7t) *(.gcc_except_table) *(.gnu.linkonce.r.*) . = ALIGN(4); _etext = .; _sidata = _etext; PROVIDE(etext = .); _fini = .; *(.fini) } >flash .data : AT (_etext) { . = ALIGN(4); _sdata = .; *(.ramfunc .ramfunc.* .fastrun .fastrun.*) *(.data .data.*) *(.gnu.linkonce.d.*) . = ALIGN(4); _edata = .; } >sram .ARM.extab : { *(.ARM.extab*) } >sram __exidx_start = .; .ARM.exidx : { *(.ARM.exidx*) } >sram __exidx_end = .; .bss (NOLOAD) : { . = ALIGN(4); /* This is used by the startup in order to initialize the .bss secion */ _sbss = .; *(.bss .bss.*) *(.gnu.linkonce.b.*) *(COMMON) . = ALIGN(4); _ebss = .; } >sram end = .; PROVIDE( _estack = 0x20010000 ); } вот простейшая программа где я хочу сконфигурировать порт А: #include <stdio.h> #include "stm32f10x.h" int main () { // int i; // int n; GPIOA->CRL = 0x0; while(1); return 0; } почемуто он мне выдает: Type 'GPIOA' could not be resolved main.c /armtest1 line 11 Semantic Error странно, ведь в файле stm32f10x.h есть корректное описание данного порта, и в основную программу этот файл включен. когда компилю без этой строчки, то проект собирается нормально и создается исполняемый файл. что может быть не так? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adnega 11 27 января, 2012 Опубликовано 27 января, 2012 · Жалоба А как компиллятор узнает ядро? Ключики -mcpu=cortex-m3 -mthumb присутствуют? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_Ivan_ 0 27 января, 2012 Опубликовано 27 января, 2012 · Жалоба http://h0rr0rr-drag0n.blogspot.com/2011/08...inux-linux.html Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
BlackOps 0 27 января, 2012 Опубликовано 27 января, 2012 · Жалоба А как компиллятор узнает ядро? Ключики -mcpu=cortex-m3 -mthumb присутствуют? да. эта линия прописана в настройках. без линии: GPIOA->CRL = 0x0; все компилится нормально Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 15 28 января, 2012 Опубликовано 28 января, 2012 · Жалоба Добавьте в начале файла строчку #include "stm32f10x.h" Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
BlackOps 0 30 января, 2012 Опубликовано 30 января, 2012 · Жалоба Добавьте в начале файла строчку #include "stm32f10x.h" не помогло. убрал #include <stdio.h> тоже. т.к. это не нужно. сейчас ковыряю разные ссылки с инструкциями... все пишут по разному, но то как у меня все установлено выглядит правильным и почти как в инструкциях. просто сам факт того что файл заголовка с декларацией порта включен а компилер его не хочет принимать непонятен! что еще может быть упущено? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 15 30 января, 2012 Опубликовано 30 января, 2012 · Жалоба Ну чудес-то не бывает:) GPIOA описан в файле stm32f10x.h. Поэтому при выполнении двух условий: 1. Вы включили stm32f10x.h в свой Си-файл; 2. Компилятор нашёл файл stm32f10x.h. всё должно быть нормально. Как сейчас у вас ругается компилятор? Не пишет ли он случайно, что не нашёл stm32f10x.h? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
BlackOps 0 30 января, 2012 Опубликовано 30 января, 2012 · Жалоба Как сейчас у вас ругается компилятор? Не пишет ли он случайно, что не нашёл stm32f10x.h? нет. вот моя ошибка которая внизу в окошке видна: Description Resource Path Location Type Type 'GPIOA' could not be resolved main.c /armtest1 line 13 Semantic Error А может всетаки дело связано как-то с линкером? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 15 30 января, 2012 Опубликовано 30 января, 2012 · Жалоба Может там ещё что-то компилятор выдаёт, до этой строчки. Вы переключитесь внизу на вкладку "Console", и посмотрите, что там пишется. Попробуйте ещё поместить файл stm32f10x.h в тот же каталог, где находится ваша программа. Кстати, если мне не изменяет память, для корректной работы stm32f10x.h нужно определить тип используемого процессора, что-то типа #define STM32F10X_HD Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Edit2007 3 30 января, 2012 Опубликовано 30 января, 2012 · Жалоба Возможно компилятор не понимает обращение -> (через стрелку), поскольку файл main.c (сишный без плюсов), и такой штуки в стандарте нет. Изменить расширение файла на cpp или попробовать (*PORTA).CRL = 0; // как то так Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 30 января, 2012 Опубликовано 30 января, 2012 · Жалоба Возможно компилятор не понимает обращение -> (через стрелку), поскольку файл main.c (сишный без плюсов), и такой штуки в стандарте нет. "Такая штука" есть. А ругается он на __IO, надо полагать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
BlackOps 0 31 января, 2012 Опубликовано 31 января, 2012 · Жалоба Может там ещё что-то компилятор выдаёт, до этой строчки. Вы переключитесь внизу на вкладку "Console", и посмотрите, что там пишется. Вот распечатка из консоли: **** Build of configuration Debug for project armtest1 **** make all Invoking: ARM Sourcery Linux GNU Print Size arm-none-eabi-size --format=berkeley armtest1.elf text data bss dec hex filename 20 0 0 20 14 armtest1.elf Finished building: armtest1.siz **** Build Finished **** Попробуйте ещё поместить файл stm32f10x.h в тот же каталог, где находится ваша программа. так он в том же каталоге и находится, и в директории проекта где сама программа. Кстати, если мне не изменяет память, для корректной работы stm32f10x.h нужно определить тип используемого процессора, что-то типа #define STM32F10X_HD это сделано, без этого он бы другую ошибку выдал. с этим проблем нет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 15 31 января, 2012 Опубликовано 31 января, 2012 · Жалоба **** Build of configuration Debug for project armtest1 **** make all Invoking: ARM Sourcery Linux GNU Print Size arm-none-eabi-size --format=berkeley armtest1.elf text data bss dec hex filename 20 0 0 20 14 armtest1.elf Finished building: armtest1.siz Так у вас всё в порядке, ошибок-то -- нет :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
BlackOps 0 31 января, 2012 Опубликовано 31 января, 2012 · Жалоба Так у вас всё в порядке, ошибок-то -- нет :) как же нет когда он в другой вкладке выдает: Type 'GPIOA' could not be resolved main.c /armtest1 line 11 Semantic Error ? Или...это не ошибка компилера? А может сама среда не может разобратся в этом объявлении? И кстати, когда я вписываю GPIOA в окне редактора, и ставлю ->, то он дальше сам мне предлагает какие регистры выбирать! т.е. сама среда разработки видит и знает об этих объявлениях! ну тогда зачем такая ошибка светится!? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 134 31 января, 2012 Опубликовано 31 января, 2012 · Жалоба Простите что влезаю, но в вашем скрипте ошибка. Обратите внимание на строки: .data : AT (_etext) { и _etext = .; _sidata = _etext; PROVIDE(etext = .); _fini = .; *(.fini) т.е. если в вашей программе что-то попадет в секцию .fini, то данные секции .data наложатся на это что-то. Я не знаю откуда пошла эта мода указывать начало секции через абсолютный адрес методом ".data : AT (_etext)", хотя можно более прямо и логично сказать "положи это в конец региона" .data { ........... } >sram AT > flash _sidata = LOADADDR(.data); И данные всегда лягут куда надо вне зависимости что еще было напихано в регион флеша. По основному вопросу: согласен с AHTOXA, надо определить символ STM32F10X_HD или подобный исходя из типа вашего процессора. Удобнее всего это сделать в makefile, добавив CFLAGS+=DSTM32F10X_HD Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться