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

 
 
> Gcc 4.7.x AVR и PROGMEM
sherr
сообщение Jan 26 2013, 14:56
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 257
Регистрация: 10-06-06
Из: Ставрополь
Пользователь №: 17 955



Где-то встречал, что начиная с какой-то из свежих версий GCC AVR для размещения констант в флеш-памяти вместо модификатора
PROGMEM достаточно указывать const (как у GCC ARM), но повторно найти это не могу ...
Подтвердите или опровергните, пожалуйста ...
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
amaora
сообщение Jan 28 2013, 16:10
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 421
Регистрация: 2-01-08
Пользователь №: 33 778



Написать свой срипт линкера который отправляет .rodata во флеш, я так делаю чтобы объявлять строковые константы как обычно а не через это место. Но надо помнить, что все const попадают во флеш и читать их надо от туда.

Про __flash не знал, пойду посмотрю, спасибо.
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Jan 28 2013, 16:34
Сообщение #3


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(amaora @ Jan 28 2013, 19:10) *
я так делаю чтобы объявлять строковые константы как обычно а не через это место.

Эх. Если бы еще была такая возможность:
например, задаем в большом кол-ве printf() строки, а они складываются в секцию без повторений. Дас ист фантастиш.
Go to the top of the page
 
+Quote Post
ReAl
сообщение Jan 28 2013, 19:46
Сообщение #4


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

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



Цитата(_Pasha @ Jan 28 2013, 18:34) *
Эх. Если бы еще была такая возможность:
например, задаем в большом кол-ве printf() строки, а они складываются в секцию без повторений. Дас ист фантастиш.
А ещё чтобы хвосты сшивал (и слюнки потекли…), т.е. для "write: done" и "done" заводил одну строку и для "done" показывал в её хвост…

Но это беда AVR.
Код
// merge.c
#include <stdio.h>

extern void foo();

void moo()
{
        printf("-%s-\n", "fooo");
}

int main()
{
        foo();
        moo();
}

Код
// foo.c
#include <stdio.h>

void foo()
{
        puts("fooo");
        puts("another fooo");
}

Цитата
$ avr-gcc -O2 -o merge merge.c foo.c
$ strings merge
(кучка случайной чепухи)
-%s-
fooo
fooo
another fooo
У более других с этим вроде легче:
Цитата
$ gcc -O2 -s -o merge merge.c foo.c
$ strings merge
/lib64/ld-linux-x86-64.so.2
__gmon_start__
(кучка разного и случайной чепухи)
-%s-
another fooo
Цитата
$ arm-kgp-eabi-gcc -mcpu=cortex-m3 -mthumb -O2 -s -o merge merge.c foo.c
$ strings merge
(гора случайной чепухи)
-%s-
another fooo
0000000000000000INF
0123456789ABCDEF
0123456789abcdef


p.s. -fmerge-constants -fmerge-all-constants для avr-gcc не помогает, для остальных и не нужен оказался


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



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


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


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