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

 
 
85 страниц V  « < 31 32 33 34 35 > »   
Reply to this topicStart new topic
> свежак KGP win32/arm/avr/mips/m68k, GNU tools chain
klen
сообщение Nov 24 2010, 21:42
Сообщение #481


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

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



Цитата(adnega @ Nov 24 2010, 17:50) *
memcpy я нигде не использую, компилятор вставляет ее сам (например, при присваивании структур). Линкер не может найти.

1. я бы на месте компиллера тоже самое сделал. наверно хотя это не его собачче дело функции вызывать, код генерить копирующий да, но функции...
2. однакож... я если честно не знал что в С структуры можно присваивать.... век живи век учись...
Go to the top of the page
 
+Quote Post
ReAl
сообщение Nov 25 2010, 07:34
Сообщение #482


Нечётный пользователь.
******

Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417



Цитата(adnega @ Nov 24 2010, 20:37) *
правильно я думаю, что принеобходимости gcc сам вызовет ld (например, для выполнения скрипта линкера)?
gcc (gcc.exe) это не компилятор а программа управления компиляторами. Весь пакет GCC — это GnuCompilerCollection, а исполняемый файл gcc это сокрее GnuCompilerController.
Он вызывает ld всегда, если его не попросить специально этого не делать ключиками -c, -S, -E.
Не вызывает компилятор, если на входе указаны только объектные файлы.
Вызывает ассемблер, если на входе файл .s
Зная заданные при сборке пути, сам их подставляет куда надо (запуская препроцесор, компилятор, линкер).
И так далее. Т.е. делает много вещей по умолчанию, которые иначе пришлось бы делать вручную.
Даже оптимизация может выполняться отдельными исполняемыми файлами и cc вызывает их только если оптимизация задана.

А по поводу -l, насколько я понимаю, дело в этом
Цитата
The only difference between using an -l option and specifying a file name is that -l surrounds library with `lib' and `.a' and searches several directories.
Задавая через -l Вы просите его поискать библиотеку и в каталогах по умолчанию.
Задавая в командной строке полное имя библиотеки — взять библиотеку в текущем каталоге либо в указанных по -L


--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Nov 25 2010, 11:02
Сообщение #483


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(klen @ Nov 25 2010, 00:42) *
век живи век учись...
Это да...

Ну так стандартная функция div ведь возвращает структуру, которая присваивается структуре.
Код
div_t x = div(n, 10U);

Жаль что нельзя инициализировать структуру константой после её объявления:
Код
div_t x = {10, 10}; // можно
div_t y;
y = {10, 10};    // нельзя

Жаль что нельзя сравнивать структуры на равенство:
Код
div_t x = {10,10};
div_t y = {10,10};
if (x==y)
{
}

С чего бы такие ограничения?


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
adnega
сообщение Nov 25 2010, 11:38
Сообщение #484


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



спасибо за ответы.

Про gcc я так и думал - мол, делает все за всех о чем его надо просить ключиками. Не ясно почему не работает ld, но сейчас это уже не актуально - надеюсь, со временем осознание придет.

так)

Проект компилируется и даже работает код в железе (причем используются прерывания).
Теперь не могу найти откуда берется таблица векторов прерываний (или весь startup).
По сути мне нужно прописать новое прерывание (для SDIO), в файле stm32f10x_it.c его нет.
Где почитать по этому вопросу (редактирование таблицы векторов прерываний, стартап и т.п.)?
+ где почитать о том, что делается до функции main (инициализация переменных и т.п.)
+ как задавать размер стека и его положение (сейчас жестко задаю размер и положение; как хотя бы приблизительно узнать необходимый размер стека)?
Go to the top of the page
 
+Quote Post
ReAl
сообщение Nov 25 2010, 14:21
Сообщение #485


Нечётный пользователь.
******

Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417



Цитата(demiurg_spb @ Nov 25 2010, 13:02) *
Жаль что нельзя инициализировать структуру константой после её объявления:
Код
div_t x = {10, 10}; // можно
div_t y;
y = {10, 10};    // нельзя

C99 6.5.2.5 Compound literals
Иногда пользуюсь.
Код
struct foo {
        int a, b;
};

struct foo foo1;
void moo() {  foo1 = (struct foo){1, 2};  }
gcc -O2 -S -std=c89 --pedantic stru.c
Цитата
str.c: In function ‘moo’:
stru.c:9: warning: ISO C90 forbids compound literals
gcc -O2 -S -std=c99 --pedantic stru.c
cat stru.s
Код
    .file    "stru.c"
    .text
    .p2align 4,,15
.globl moo
    .type    moo, @function
moo:
.LFB0:
    .cfi_startproc
    movl    $1, foo1(%rip)
    movl    $2, foo1+4(%rip)
    ret
    .cfi_endproc
.LFE0:


Цитата(demiurg_spb @ Nov 25 2010, 13:02) *
Жаль что нельзя сравнивать структуры на равенство:
...
С чего бы такие ограничения?
Ну батенька, Вам мёд, да ещё и ложкой :-)


Цитата(adnega @ Nov 25 2010, 13:38) *
Не ясно почему не работает ld,
Задать каталоги библиотек компилятора через ключ -L пробовали? gcc ему их подсовывает от себя.


--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Nov 25 2010, 14:21
Сообщение #486


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Цитата(klen @ Nov 25 2010, 00:42) *
2. однакож... я если честно не знал что в С структуры можно присваивать.... век живи век учись...

Присваивать-то можно, но не факт что оптимально будет присваиваться.
Всё-таки memcpy() предпочтительнее


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
ReAl
сообщение Nov 25 2010, 14:31
Сообщение #487


Нечётный пользователь.
******

Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417



Кстати, оно даже так работает
Код
void baa( struct foo *p);

void kwa() {
        baa( &(struct foo){ 5, 6} );
}
Создаёт на стеке временную переменную типа struct foo, заполняет её и адрес передаёт. Вот avr-gcc. Ничем не отличается от явного указания локальной переменной с её инициализацией.
Код
.global    kwa
    .type    kwa, @function
kwa:
    push r29
    push r28
    rcall .
    rcall .
    in r28,__SP_L__
    in r29,__SP_H__
/* prologue: function */
/* frame size = 4 */
    ldi r24,lo8(5)
    ldi r25,hi8(5)
    std Y+2,r25
    std Y+1,r24
    ldi r24,lo8(6)
    ldi r25,hi8(6)
    std Y+4,r25
    std Y+3,r24
    movw r24,r28
    adiw r24,1
    rcall baa
/* epilogue start */
    pop __tmp_reg__
    pop __tmp_reg__
    pop __tmp_reg__
    pop __tmp_reg__
    pop r28
    pop r29
    ret

Именно так и пользовался — для инициализиации записей в EEPROM значениями по умолчанию при слёте CRC (ну, тех записей, которые можно было просто переинициализировать).

Цитата(MrYuran @ Nov 25 2010, 16:21) *
Присваивать-то можно, но не факт что оптимально будет присваиваться.
Всё-таки memcpy() предпочтительнее
Так выше ж было сказано, что он memcpy для этого и вызывает.
Когда-то раньше, кто-то другой, кто не умел по месту разбираться в длине/её константности в вызове memcpy и вызывал именно функцию memcpy всегда, для копирования структур присваиванием прикидывал и либо делал почленное копирования по месту, либо вызывал memcpy. Так что присваивание структур компилировалось оптимально.


--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Nov 25 2010, 14:42
Сообщение #488


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Цитата(AHTOXA @ Oct 22 2010, 20:01) *
Ну это вы напрасноsmile.gif Думаю, что значительно более половины тутошних виндузятников сидит под ХР 32-бит, и ещё какое-то время никуда не двинутся. Особенно в свете того, что, как я читал, 7-я винда не даёт ставить неподписанные дрова (прощайте LPT-шные программаторы с giveio, прощай olimex MSP430-JTAG-TINY, и ещё куча интересных железок.)
Ну или, если говорить только про себя, то лично я пока сижу под ХР 32-битsmile.gif

Мне админ поставил 7-ку на пару недель, потом полетел винт, и на новый вернул опять ХР.
Брезгует семёрка нормально работать в сети с 2003 Server, хочет 2008...
По идее конечно, надо переходить на 64, но только не винду..


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Nov 25 2010, 21:20
Сообщение #489


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(ReAl @ Nov 25 2010, 17:21) *
C99 6.5.2.5 Compound literals
Иногда пользуюсь.
О! Не знал. Спасибо!
Цитата
Ну батенька, Вам мёд, да ещё и ложкой :-)
Ага! Каштановый медок обожаю!:-)


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
adnega
сообщение Nov 26 2010, 07:43
Сообщение #490


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Цитата(adnega @ Nov 25 2010, 14:38) *
спасибо за ответы.

Про gcc я так и думал - мол, делает все за всех о чем его надо просить ключиками. Не ясно почему не работает ld, но сейчас это уже не актуально - надеюсь, со временем осознание придет.

так)

Проект компилируется и даже работает код в железе (причем используются прерывания).
Теперь не могу найти откуда берется таблица векторов прерываний (или весь startup).
По сути мне нужно прописать новое прерывание (для SDIO), в файле stm32f10x_it.c его нет.
Где почитать по этому вопросу (редактирование таблицы векторов прерываний, стартап и т.п.)?
+ где почитать о том, что делается до функции main (инициализация переменных и т.п.)
+ как задавать размер стека и его положение (сейчас жестко задаю размер и положение; как хотя бы приблизительно узнать необходимый размер стека)?


Разобрался. Все меня интересующее было в файлике stm32f10x_vector.c.

Проект с Keil успешно переведен под gcc! Осталось только причесать, но с этим справлюсь самостоятельно.
)
Go to the top of the page
 
+Quote Post
Spym
сообщение Dec 13 2010, 08:21
Сообщение #491


Участник
*

Группа: Участник
Сообщений: 71
Регистрация: 24-02-08
Из: Москва
Пользователь №: 35 348



klen, скажите, а как обстоят дела с поддержкой C++ исключений на AVR?
Go to the top of the page
 
+Quote Post
klen
сообщение Dec 14 2010, 07:38
Сообщение #492


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

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



Цитата(Spym @ Dec 13 2010, 11:21) *
klen, скажите, а как обстоят дела с поддержкой C++ исключений на AVR?


а четр его знает, я не пробывал. тут и без с++ исключений тяжко - во превых никак не могут в транке поченить складывание отладочной информации dwarf в бинарник, во вторых с++ на AVR это для лично для меня из области сферически-вакумных коней, а уж исключения... их на больших машинах иногда отключают - дорогое удовольствие (код размотки исключений + вся их инфраструктура во всех моих проектах была больше (~44k) чем целевой код, в итоге я таки научился вместе скомпиллером все это отключать). в третих - буквально в воскресенье позвонил старый сослуживец, мы сним начинали делать аппарат прозвонка на 1000 контактов (кабельные пауки тестить), так вот я начинал делать на модулях с кортексами, я уволился, он не имея опыта по армам все переделал на атмегах1280. решение орг проблем по девайсу заняло 9 месяцев - теперь он в панике просит все переделать в зад на кортексах потому как с мегами жопа начилась. неможет их купить, а нада сотнями штук! короце друзья - с авэров я слез окончательно и бесповоротно чего и вам желаю.
возможно все вышесказанное не относится к AVR32.

я для авр сборки не выкладываю не потому что забил, потому что не получается c отладочной информацией elf заставить gcc генерить sad.gif
если нада я могу свежак собрать - я уверен что код будет генерится хороший но в AVRStudio можно будет только по асму ползать при симуляции.


свежак для армов
64bit host
http://www.klen.org/Files/DevTools/kgp-arm...-64_20101212.7z

32bit host
http://www.klen.org/Files/DevTools/kgp-arm...-32_20101212.7z
Go to the top of the page
 
+Quote Post
garlands
сообщение Dec 14 2010, 08:13
Сообщение #493


Местный
***

Группа: Свой
Сообщений: 364
Регистрация: 15-04-08
Из: UA
Пользователь №: 36 798



Цитата(MrYuran @ Nov 25 2010, 16:42) *
Мне админ поставил 7-ку на пару недель, потом полетел винт, и на новый вернул опять ХР.
Брезгует семёрка нормально работать в сети с 2003 Server, хочет 2008...
По идее конечно, надо переходить на 64, но только не винду..

#define offtop_mode
да Вы что??! =0 у меня на работе стояла семерка, а файлопомойка вообще на 2000 винде была. и ничего, все нормально ходило.
это примерно как на позапрошлой работе у меня вся контора (а это без малого полторы тысячи человек) сидела на 2000 винде только потому, что админ (линуксоид просто супер, а вот в винде...) не знал, что хрюшу можно завтавить пускать на шару не только под гостевой учеткой... wink.gif
#undef offtop_mode
Go to the top of the page
 
+Quote Post
Genadi Zawidowsk...
сообщение Dec 14 2010, 09:41
Сообщение #494


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

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



Цитата(klen @ Dec 14 2010, 10:38) *
свежак для армов
...
32bit host


Работает (at91sam7sxxx).
Go to the top of the page
 
+Quote Post
ReAl
сообщение Dec 14 2010, 13:58
Сообщение #495


Нечётный пользователь.
******

Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417



Цитата(klen @ Dec 14 2010, 09:38) *
дорогое удовольствие (код размотки исключений + вся их инфраструктура
Там, если я правильно понял, не только код, но и на стеке дополнительная информация для размотчика должна быть, т.е. ОЗУ тоже полетит.
Для AVR не вижу возможности применять. Разве что на самых толстых, но тут уже не вижу смысла их самих применять (кроме, разве что, atxmega).

Цитата(klen @ Dec 14 2010, 09:38) *
я для авр сборки не выкладываю не потому что забил, потому что не получается c отладочной информацией elf заставить gcc генерить sad.gif
если нада я могу свежак собрать - я уверен что код будет генерится хороший но в AVRStudio можно будет только по асму ползать при симуляции.
По студиям не ползаю.

Только мне бы сборочки AVR и ARM под Linux-64… Всё лень самому научиться это делать…


--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post

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

 


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


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