Перейти к содержанию
    

линковка строчных констант

-Есть набор строк -массивов во флеши, на которые ссылаются всякие менюхи для символьного LCD,

поставили пи-тековский ОЛЕД ,там все расширения таблицы символов по-иному..и некоторые символы вообще не те..

Был написан аналогчный вариант меню по этот индикатор, т.е. lcd_menu.h и oled_menu.h но это две прошивки..

вопрос: если слепить два файла в один, и использовать первое меню идельту между бывшими первыми элментами для смещения ,

например по джмперу,можно ли гарантировать что линкер расположит в сегмнте флеши все линейно,

и в произволный момент не перетасует по своему усмотрению..

Изменено пользователем dimone

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Можно принудительно положить в нужный сегмент 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'а.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

-не очень хотелось завязываться на абсолютные адреса,

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

 

struct

{

int a;

int b;

}st;

 

int ofst= offsetof(st,a);

 

-ругается Error[Pe029]: expected an expression ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

#include <stddef.h>

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

int main( void )
{
  return offsetof(ST,a);
}

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

-Спасибо , получилось, но может существует какой-то иной способ как передававать (например в функцию) номер структуры также и произвольный элемент структуры , кроме как его смещением ?

А то получается структура лишь для хранения, а работа с ее полями сплошной криминал с разыменовываниями и арифметикой с адресацией..

Изменено пользователем dimone

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я сделал просто таблицу размером 128 байт,

для перекодировки старшей половины символов (0x80 - 0xff) из win1251 (в которой исходные тексты) в кодировку конкретного индикатора.

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

но хотелось на одно решение посадить и языковые расширения меню..

а зачем? по моему с разделением задач очень красиво получается.

Для каждого типа дисплея свой драйвер. Завтра замените производителя дисплея - напишете еще один простой драйвер со своей таблицей перекодировки.

А языковые расширения отдельно. Независимо от используемого дисплея. Переносимо, гибко, стильно, модно, молодежно :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

-да я обеими за, только в моем случае -допиливание уже давно писанного,

и в любом случае необходимо организоввать статические данные так,

чтоб минорными доработками иметь возможность подменять адреса константных строк

на входе пользующих их функций(

 

Изменено пользователем dimone

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...