Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: линковка строчных констант
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Cредства разработки для МК > IAR
dimone
-Есть набор строк -массивов во флеши, на которые ссылаются всякие менюхи для символьного LCD,
поставили пи-тековский ОЛЕД ,там все расширения таблицы символов по-иному..и некоторые символы вообще не те..
Был написан аналогчный вариант меню по этот индикатор, т.е. lcd_menu.h и oled_menu.h но это две прошивки..
вопрос: если слепить два файла в один, и использовать первое меню идельту между бывшими первыми элментами для смещения ,
например по джмперу,можно ли гарантировать что линкер расположит в сегмнте флеши все линейно,
и в произволный момент не перетасует по своему усмотрению..
E.V.G.
Можно принудительно положить в нужный сегмент Flash, например в INFOB
#pragma memory = constseg(INFOB) // адреса 01000h - 0100Dh
const long data[5] =
{ // E D C B A
1.5557, -62.5211, 949.3678, -6683.6216, 19308.8867
};
#pragma memory = default

Или так, в нужную ячейку Flash:
#pragma location = 0x1000
{ const long data = 1.5557; }
#pragma memory = default

По конкретней читайте в справке, например в IAR'а.
dimone
-не очень хотелось завязываться на абсолютные адреса,
придется переписывать, сразу уперся в ошибку ИАРа в следующем "учебном" фргменте:

struct
{
int a;
int b;
}st;

int ofst= offsetof(st,a);


-ругается Error[Pe029]: expected an expression ?
desh
Код
#include <stddef.h>

typedef struct
{
  int a;
  int b;
} ST;

int main( void )
{
  return offsetof(ST,a);
}
dimone
-Спасибо , получилось, но может существует какой-то иной способ как передававать (например в функцию) номер структуры также и произвольный элемент структуры , кроме как его смещением ?
А то получается структура лишь для хранения, а работа с ее полями сплошной криминал с разыменовываниями и арифметикой с адресацией..
SSerge
Я сделал просто таблицу размером 128 байт,
для перекодировки старшей половины символов (0x80 - 0xff) из win1251 (в которой исходные тексты) в кодировку конкретного индикатора.

dimone
Транскод -это первое ,что пришло в голову, но хотелось на одно решение посадить и языковые расширения меню..
desh
Цитата
но хотелось на одно решение посадить и языковые расширения меню..

а зачем? по моему с разделением задач очень красиво получается.
Для каждого типа дисплея свой драйвер. Завтра замените производителя дисплея - напишете еще один простой драйвер со своей таблицей перекодировки.
А языковые расширения отдельно. Независимо от используемого дисплея. Переносимо, гибко, стильно, модно, молодежно sm.gif
dimone
-да я обеими за, только в моем случае -допиливание уже давно писанного,
и в любом случае необходимо организоввать статические данные так,
чтоб минорными доработками иметь возможность подменять адреса константных строк
на входе пользующих их функций(
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.