Например TDA7294

Форум РадиоКот • Просмотр темы - Востребована ли простая GUI-библиотека для LCD?
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Пт авг 01, 2025 06:22:36

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 54 ]    , 2,  
Автор Сообщение
Не в сети
 Заголовок сообщения: Re: Востребована ли простая GUI-библиотека для LCD?
СообщениеДобавлено: Сб дек 22, 2012 11:44:14 
Встал на лапы
Аватар пользователя

Зарегистрирован: Пн дек 03, 2012 19:31:53
Сообщений: 110
Откуда: Санкт-Петербург
Рейтинг сообщения: 0
ArtDen, вот что нашлось.

Думаю, тут два варианта - научить программу переводить битмапы в набор инструкций (вызовы для рисования примитивов или точек), либо извращаться с дефайнами, чтобы только при компиляции под AVR подставлялся специфичный для AVR код, препятствующий копированию в RAM.
PS. А вы сами пробовали на МК тестировать? В ARM Cortex-M ведь тоже гарвардская архитектура, и для них тоже видимо придется что-то придумывать.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Востребована ли простая GUI-библиотека для LCD?
СообщениеДобавлено: Сб дек 22, 2012 11:52:14 
Мучитель микросхем
Аватар пользователя

Карма: 12
Рейтинг сообщений: 49
Зарегистрирован: Пн фев 22, 2010 09:12:34
Сообщений: 462
Рейтинг сообщения: 0
DrGandalf писал(а):
PS. А вы сами пробовали на МК тестировать? В ARM Cortex-M ведь тоже гарвардская архитектура, и для них тоже видимо придется что-то придумывать.

Конечно. У меня она на STM32F100R6T6B работает.
А у Cortex-M архитектура фон Неймана, так что там всё в порядке.

_________________
http://ufa-darts.ru/ - приходи играть в дартс в Уфе


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Востребована ли простая GUI-библиотека для LCD?
СообщениеДобавлено: Сб дек 22, 2012 12:10:29 
Встал на лапы
Аватар пользователя

Зарегистрирован: Пн дек 03, 2012 19:31:53
Сообщений: 110
Откуда: Санкт-Петербург
Рейтинг сообщения: 0
ArtDen, вы что-то путаете. У Cortex-M3 гарвардская архитектура. Как и в вашем STM32F100R6T6B.
Посмотрите табличку вот тут, раздел "Instruction sets". Видно, что не у всех Cortex-M архитектура Фон-Неймана.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Востребована ли простая GUI-библиотека для LCD?
СообщениеДобавлено: Сб дек 22, 2012 16:45:58 
Мучитель микросхем
Аватар пользователя

Карма: 12
Рейтинг сообщений: 49
Зарегистрирован: Пн фев 22, 2010 09:12:34
Сообщений: 462
Рейтинг сообщения: 0
Всё, разобрался. Мне объяснили, что хотя у CortexM гарвардская архитектура, но для программиста это не важно, т.к. адресное пространство одно и для FLASH-памяти и для ОЗУ, а также команды доступа к ячейкам FLASH и ОЗУ одинаковые.
Правда, в вики написано что
Цитата:
Также машина гарвардской архитектуры имеет различные адресные пространства для команд и данных. Так, нулевой адрес инструкций — это не то же самое, что и нулевой адрес данных.
Но похоже что для CortexM это не так.

_________________
http://ufa-darts.ru/ - приходи играть в дартс в Уфе


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Востребована ли простая GUI-библиотека для LCD?
СообщениеДобавлено: Сб дек 22, 2012 17:33:12 
Встал на лапы
Аватар пользователя

Зарегистрирован: Пн дек 03, 2012 19:31:53
Сообщений: 110
Откуда: Санкт-Петербург
Рейтинг сообщения: 0
Я тоже для себя разобрался. В английской (и русской тоже) вики в статье про гарвардскую архитектуру приведен также подраздел с описанием т. н. модифицированной гарвардской архитектуры (Modified Harvard architecture) - когда адресное пространство одно, однако доступ к RAM и ROM осуществляется по разным шинам. Так вот ядра Cortex M3 и M4 относятся именно к такой архитектуре, но уточнение "модифицированная" касательно архитектуры часто просто опускается.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Востребована ли простая GUI-библиотека для LCD?
СообщениеДобавлено: Сб дек 22, 2012 17:40:28 
Друг Кота
Аватар пользователя

Карма: 25
Рейтинг сообщений: 99
Зарегистрирован: Вс янв 24, 2010 19:19:52
Сообщений: 4468
Откуда: Главный Улей России (Moscow)
Рейтинг сообщения: 0
Начал знакомство с STM32 с ядра CortexM4F (STM32F407VG).
На сколько я понял из даташита, там вся память (ОЗУ, ПЗУ), регистры и вся периферия идут сплошным файлом.
Приведенный пример ниже загружает массив (скомпилированный бинарник) с флеша в ОЗУ и передает ему управление банальным прыжком в область ОЗУ.

main flash firmware (main.cpp)
Код:
#include <ST\iostm32f407VG.h>


//////////////////////////////////////////////////////////////////////////////
typedef int (*func)(void);

//////////////////////////////////////////////////////////////////////////////
#pragma section = "FLASH"
const unsigned char rawData[59][4] = {
    0x000x840x010x200xE10x010x000x200x9F0x010x000x20,
    0x9F0x010x000x200x9F0x010x000x200x9F0x010x000x20,
    0x9F0x010x000x200x000x000x000x000x000x000x000x00,
    0x000x000x000x000x000x000x000x000x9F0x010x000x20,
    0x9F0x010x000x200x000x000x000x000x9F0x010x000x20,
    0x9F0x010x000x200x4F0xF00x000x500x010x680x0A0x68,
    0x420xF00x080x020x0A0x600x410x680x0A0x680x420xF0,
    0xAA0x420x0A0x600x810x680x000x220x0A0x600xC10x68,
    0x0A0x600x010x690x0A0x600x080xE00x000xBF0x490x1C,
    0x910x420xFB0xDB0x410x690x0A0x680x820xF40x000x42,
    0x0A0x600x000x210x000x4A0xF50xE70xFF0xFF0x0F0x00,
    0x4E0xF60x880x510xCE0xF20x000x010x080x680x400xF4,
    0x700x000x080x600x4F0xF00x000x700xE10xEE0x100x0A,
    0x700x470xFE0xE70x000xF00x090xF80x000x280x010xD0,
    0xC00x460xC00x460x000x200xFF0xF70xC70xFF0x000xF0,
    0x020xF80x010x200x700x470x000xF00x010xB80x000x00,
    0x070x460x380x460x000xF00x020xF80xFB0xE70x000x00,
    0x800xB50xC00x460xC00x460x020x4A0x110x000x180x20,
    0xAB0xBE0xFB0xE70x260x000x020x000xC00x460xC00x46,
    0xFF0xF70xCE0xFF0xFF0xF70xDA0xFF
};

////////////////////////////////////////////////////////////////////////////// Таблица адресов периферии
#pragma section = "FLASH"
volatile const uint32_t io_p[6] = {(uint32_t)&RCC->AHB1ENR,  (uint32_t)&GPIOD->MODER, 
                                   (uint32_t)&GPIOD->OTYPER, (uint32_t)&GPIOD->OSPEEDR, 
                                   (uint32_t)&GPIOD->PUPDR, (uint32_t)&GPIOD->ODR};

////////////////////////////////////////////////////////////////////////////// Место, где будет расположена таблица (Начало ОЗУ)
#pragma location = 0x20000000
volatile uint32_t io_ptr[20];

//////////////////////////////////////////////////////////////////////////////
int main()
{
  uint32_t size = (sizeof(rawData)/4); //Размер бинарника в словах
  uint32_t start_addr = 0x20000100//Адрес, куда следует поместить бинарник
  
  volatile uint32_t *Raw = (uint32_t*)start_addr; //Передача адреса указателю
  
  for(uint32_t x=0x<size; x++) //Копирование бинарника в ОЗУ
  {
    Raw[x] = 0x00000000;
    Raw[x] |= (uint32_t)(rawData[x][0]<<0);
    Raw[x] |= (uint32_t)(rawData[x][1]<<8);
    Raw[x] |= (uint32_t)(rawData[x][2]<<16);
    Raw[x] |= (uint32_t)(rawData[x][3]<<24);
  }
  
  for(uint32_t y = 0y<6y++) //Копирование адресов периферии (для частичного абстрагирования от конкретного камня)
  {
    io_ptr[y] = io_p[y];
  }
  
  
  func RAM = (func)Raw[1];//копирование адреса начала программы из Reset_Handler бинарника
  RAM(); //Собственно, само исполнение программы

  while(1); //На случай, если программа завершится
}
 


bin array code (main.cpp)
Код:


#include <ST\iostm32f407VG.h>
#include "IO_MAP.h"

///////////////////////////////////////////////////////////////////////////////
int main()
{
  RCC_AHB1ENR |= RCC_AHB1ENR_GPIODEN; /
/Enable GPIO D

  GPIOD_MODER |= (GPIO_MODER_MODER15_0 | 
                   GPIO_MODER_MODER14_0 | 
                   GPIO_MODER_MODER13_0 | 
                   GPIO_MODER_MODER12_0); /
/ GPIO Mode Port Out
  
  GPIOD_OTYPER = 0x00000000; /
/Out D type Push-Pull
  GPIOD_OSPEEDR = 0x00000000; /
/Out Speed Low (2MHz)
  GPIOD_PUPDR = 0x00000000; /
/Not Pull Up/Down
  
  while(1)
  {
    for(int i = 0 ; i < 0x00FFFFF ; i++){asm("nop");}
    GPIOD_ODR ^= GPIO_ODR_ODR_15;
  }
}
 


IO_MAP.h
Код:
///////////////////////////////////////////////////////////////////////////////
#pragma location = 0x20000000
volatile __no_init uint32_t *io_ptr[64];

/
//////////////////////////////////////////////////////////////////////////////
#define RCC_AHB1_ENR   0
#define GPIO_D_MODER   1
#define GPIO_D_OTYPER  2
#define GPIO_D_OSPEEDR 3
#define GPIO_D_PUPDR   4
#define GPIO_D_ODR     5
#define GPIO_D_IDR     6

///////////////////////////////////////////////////////////////////////////////
#define RCC_AHB1ENR     *io_ptr[RCC_AHB1_ENR]
#define GPIOD_MODER     *io_ptr[GPIO_D_MODER]
#define GPIOD_OTYPER    *io_ptr[GPIO_D_OTYPER]
#define GPIOD_OSPEEDR   *io_ptr[GPIO_D_OSPEEDR]
#define GPIOD_PUPDR     *io_ptr[GPIO_D_PUPDR]
#define GPIOD_ODR       *io_ptr[GPIO_D_ODR]
#define GPIOD_IDR       *io_ptr[GPIO_D_IDR]

 



При компиляции бинарника, в настройках линкера было задано иное адресное пространство для ОЗУ и ПЗУ.

TEST_RAM.icf
Код:
/*###ICF### Section handled by ICF editor, don't touch! ****/
/*-Editor annotation file-*/
/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_0.xml" */
/*-Specials-*/
define symbol __ICFEDIT_intvec_start__ = 0x20000100;
/*-Memory Regions-*/
define symbol __ICFEDIT_region_ROM_start__ = 0x20000100;
define symbol __ICFEDIT_region_ROM_end__   = 0x20017FFE;
define symbol __ICFEDIT_region_RAM_start__ = 0x20017FFF;
define symbol __ICFEDIT_region_RAM_end__   = 0x2002FFFF;
/*-Sizes-*/
define symbol __ICFEDIT_size_cstack__ = 0x400;
define symbol __ICFEDIT_size_heap__   = 0x800;
/**** End of ICF editor section. ###ICF###*/


define memory mem with size = 4G;
define region ROM_region   = mem:[from __ICFEDIT_region_ROM_start__   to __ICFEDIT_region_ROM_end__];
define region RAM_region   = mem:[from __ICFEDIT_region_RAM_start__   to __ICFEDIT_region_RAM_end__];

define block CSTACK    with alignment = 8, size = __ICFEDIT_size_cstack__   { };
define block HEAP      with alignment = 8, size = __ICFEDIT_size_heap__     { };

initialize by copy { readwrite };
//initialize by copy with packing = none { section __DLIB_PERTHREAD }; // Required in a multi-threaded application
do not initialize  { section .noinit };

place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec };

place in ROM_region   { readonly };
place in RAM_region   { readwrite,
                        block CSTACK, block HEAP };
 


Данный пример говорит о том, что ядру абсолютно начихать на то, где находятся данные, а где программа, несмотря на его гарвардскую архитектуру.

_________________
I am DX168B and this is my favourite forum on internet!


Последний раз редактировалось DX168B Вс дек 23, 2012 13:50:14, всего редактировалось 1 раз.

Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Востребована ли простая GUI-библиотека для LCD?
СообщениеДобавлено: Сб дек 22, 2012 18:36:55 
Встал на лапы
Аватар пользователя

Зарегистрирован: Пн дек 03, 2012 19:31:53
Сообщений: 110
Откуда: Санкт-Петербург
Рейтинг сообщения: 0
Спасибо за интересный пример. Хм, а без
Код:
#pragma section = "FLASH"
константный массив будет тупо скопирован в стек при инициализации?
Если так то наверное в коде проекта нужно тоже указать область

Код:
#pragma section = "FLASH"
const uint8_t tahoma14ru_Bitmaps[] = {...}


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Востребована ли простая GUI-библиотека для LCD?
СообщениеДобавлено: Сб дек 22, 2012 18:41:28 
Друг Кота
Аватар пользователя

Карма: 25
Рейтинг сообщений: 99
Зарегистрирован: Вс янв 24, 2010 19:19:52
Сообщений: 4468
Откуда: Главный Улей России (Moscow)
Рейтинг сообщения: 0
Это IARовская директива. Без нее массив копируется в ОЗУ. Причем, хрен знает куда. (в произвольную область ОЗУ)
Желательно объявить массив как volatile const , иначе при отсутствии каких либо операций с ним, компилятор его похерит.


Код:
#pragma section = "FLASH"
const uint8_t tahoma14ru_Bitmaps[] = {...}


Для IARа это будет справедливо.
Что касается GCC, то там хз. Мало имел дела с ним.

_________________
I am DX168B and this is my favourite forum on internet!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Востребована ли простая GUI-библиотека для LCD?
СообщениеДобавлено: Вс дек 23, 2012 09:37:05 
Мучитель микросхем
Аватар пользователя

Карма: 12
Рейтинг сообщений: 49
Зарегистрирован: Пн фев 22, 2010 09:12:34
Сообщений: 462
Рейтинг сообщения: 0
Сделал скроллинг в списке окна выбора. Правда, надо будет скроллер немного по-другому рисовать.

_________________
http://ufa-darts.ru/ - приходи играть в дартс в Уфе


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Востребована ли простая GUI-библиотека для LCD?
СообщениеДобавлено: Вс дек 23, 2012 17:09:26 
Встал на лапы
Аватар пользователя

Карма: 1
Рейтинг сообщений: 15
Зарегистрирован: Пт янв 21, 2011 14:16:36
Сообщений: 130
Откуда: Уфа
Рейтинг сообщения: 0
DX168B писал(а):
Это IARовская директива. Без нее массив копируется в ОЗУ. Причем, хрен знает куда. (в произвольную область ОЗУ)

Очень сильно сомневаюсь, насчёт "копирования в ОЗУ". Константные массивы обычно остаются во флеше. (Ну, если компилятор не совсем глупый, а IAR уж точно не такой)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Востребована ли простая GUI-библиотека для LCD?
СообщениеДобавлено: Вс дек 23, 2012 17:58:06 
Друг Кота
Аватар пользователя

Карма: 25
Рейтинг сообщений: 99
Зарегистрирован: Вс янв 24, 2010 19:19:52
Сообщений: 4468
Откуда: Главный Улей России (Moscow)
Рейтинг сообщения: 0
Судя по изучению ассемблерного листинга, массив все-таки копировался, несмотря на const.
А так, я записал, чтобы оно железно там оставалось. Даже несмотря на утехи компилятора.

_________________
I am DX168B and this is my favourite forum on internet!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Востребована ли простая GUI-библиотека для LCD?
СообщениеДобавлено: Вс дек 23, 2012 18:11:33 
Встал на лапы
Аватар пользователя

Карма: 1
Рейтинг сообщений: 15
Зарегистрирован: Пт янв 21, 2011 14:16:36
Сообщений: 130
Откуда: Уфа
Рейтинг сообщения: 0
DX168B писал(а):
Судя по изучению ассемблерного листинга, массив все-таки копировался, несмотря на const.

Не верю. Или вы оптимизацию отключили в ноль (хотя и при этом вряд ли).


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Востребована ли простая GUI-библиотека для LCD?
СообщениеДобавлено: Вс дек 23, 2012 19:04:58 
Друг Кота
Аватар пользователя

Карма: 25
Рейтинг сообщений: 99
Зарегистрирован: Вс янв 24, 2010 19:19:52
Сообщений: 4468
Откуда: Главный Улей России (Moscow)
Рейтинг сообщения: 0
Код:
//////////////////////////////////////////////////////////////////////////////
//#pragma section = "FLASH"
const uint32_t io_p[6] = {(uint32_t)&RCC->AHB1ENR,  (uint32_t)&GPIOD->MODER, 
                          (uint32_t)&GPIOD->OTYPER, (uint32_t)&GPIOD->OSPEEDR, 
                          (uint32_t)&GPIOD->PUPDR, (uint32_t)&GPIOD->ODR};
 


Вызывается до функции main.

Код:
__sti__routine:
        LDR.N    R0,??DataTable2
        LDR.N    R1,??DataTable2_1  ;; 0x40023830
        STR      R1,[R0, #+0]
        LDR.N    R1,??DataTable2_2  ;; 0x40020c00
        STR      R1,[R0, #+4]
        LDR.N    R1,??DataTable2_3  ;; 0x40020c04
        STR      R1,[R0, #+8]
        LDR.N    R1,??DataTable2_4  ;; 0x40020c08
        STR      R1,[R0, #+12]
        LDR.N    R1,??DataTable2_5  ;; 0x40020c0c
        STR      R1,[R0, #+16]
        LDR.N    R1,??DataTable2_6  ;; 0x40020c14
        STR      R1,[R0, #+20]
        BX       LR               ;; return


И собственно, цикл for, который копирует массив куда мне надо.

Код:
//   60   for(uint32_t y = 0; y<6; y++)
//   61   {
//   62     io_ptr[y] = io_p[y];
        MOVS     R2,#+24
        LDR.N    R1,??DataTable2
        MOV      R0,#+536870912
          CFI FunCall __aeabi_memcpy4
        BL       __aeabi_memcpy4


И все на этом

Подпрограмму __aeabi_memcpy4 показать немогу, так как она видна только в отладчике. В листинге ее нет. Суть ее, перетащить данные из одной области ОЗУ в другую.
С отладчика текст копировать не могу. Если кто покажет как, буду благодарен.
Подмечу то, что в данной версии IARа еще плохо проработана поддержка данного камня. В комплекте нет файла iostm32f407vg.h (его я добавил сам, а для других камней есть)
Хотя, в отладчике камень есть.
По этому, он может и тупить.

Есть еще сомнения?


ArtDen писал(а):
Сделал скроллинг в списке окна выбора. Правда, надо будет скроллер немного по-другому рисовать.

А исходники уже обновлены?

_________________
I am DX168B and this is my favourite forum on internet!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Востребована ли простая GUI-библиотека для LCD?
СообщениеДобавлено: Вс дек 23, 2012 20:47:11 
Друг Кота

Карма: -18
Рейтинг сообщений: 29
Зарегистрирован: Вс дек 05, 2010 06:10:34
Сообщений: 4583
Откуда: ЮВ
Рейтинг сообщения: 0
DX168B писал(а):
Есть еще сомнения?

Да, есть...
Включите в опциях компилятора генерацию map-файла и посмотрите, в map-файле, куда что ложится...

_________________
"Я не даю готовых решений, я заставляю думать!"(С)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Востребована ли простая GUI-библиотека для LCD?
СообщениеДобавлено: Вс дек 23, 2012 21:04:31 
Друг Кота
Аватар пользователя

Карма: 25
Рейтинг сообщений: 99
Зарегистрирован: Вс янв 24, 2010 19:19:52
Сообщений: 4468
Откуда: Главный Улей России (Moscow)
Рейтинг сообщения: 0
Код:
io_p                    0x20018000  0x18  Data  Lc  main.o [1]  //Злосчастный массив. Как видите, ОН В ОЗУ
rawData                 0x0800021c  0xec  Data  Lc  main.o [1] // Большой массив остался во FLASH


Запуск линкера:

Код:
#    Command line =  D:\IARprj\STM32\STM32F407VGT6\Release\Obj\PNS.o          #
#                    D:\IARprj\STM32\STM32F407VGT6\Release\Obj\main.o         #
#                    D:\IARprj\STM32\STM32F407VGT6\Release\Obj\startup_stm32f #
#                    4xx.o -o D:\IARprj\STM32\STM32F407VGT6\Release\Exe\cpp.o #
#                    ut --redirect _Printf=_PrintfFull --redirect             #
#                    _Scanf=_ScanfFull --map D:\IARprj\STM32\STM32F407VGT6\Re #
#                    lease\List\cpp.map --log libraries,initialization,module #
#                    s,redirects,sections,veneers,unused_fragments            #
#                    --log_file D:\IARprj\STM32\STM32F407VGT6\Release\List\cp #
#                    p.log --config D:\IARprj\STM32\STM32F407VGT6\STM32F407VG #
#                    T6.icf --entry __iar_program_start --inline "C:\Program  #
#                    Files (x86)\IAR Systems\Embedded Workbench               #
#                    6.0\arm\CMSIS\Lib\IAR\iar_cortexM4lf_math.a" --vfe


Оптимизация в свойствах проекта выставлена как: High - Balanced

_________________
I am DX168B and this is my favourite forum on internet!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Востребована ли простая GUI-библиотека для LCD?
СообщениеДобавлено: Вс дек 23, 2012 22:33:50 
Встал на лапы
Аватар пользователя

Карма: 1
Рейтинг сообщений: 15
Зарегистрирован: Пт янв 21, 2011 14:16:36
Сообщений: 130
Откуда: Уфа
Рейтинг сообщения: 0
DX168B писал(а):
Код:
const uint32_t io_p[6] = {(uint32_t)&RCC->AHB1ENR,  (uint32_t)&GPIOD->MODER, 
                          (uint32_t)&GPIOD->OTYPER, (uint32_t)&GPIOD->OSPEEDR, 
                          (uint32_t)&GPIOD->PUPDR, (uint32_t)&GPIOD->ODR}; 


Это плохой пример. Здесь указатели на волатильные регистры, или что-то в этом роде. Поэтому компилятор даже инициализирует их не циклом, а поштучно. (Я думаю, что это не копирование в ОЗУ, а инициализация).
Почему вы просто не убрали квалификатор FLASH от rawData? Потому что результат не подтверждает вашу теорию? :)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Востребована ли простая GUI-библиотека для LCD?
СообщениеДобавлено: Вс дек 23, 2012 22:59:54 
Друг Кота
Аватар пользователя

Карма: 25
Рейтинг сообщений: 99
Зарегистрирован: Вс янв 24, 2010 19:19:52
Сообщений: 4468
Откуда: Главный Улей России (Moscow)
Рейтинг сообщения: 0
Код:
const uint32_t io_p[6] = {0x40023830, 0x40020C00, 0x40020C04,
                          0x40020C08, 0x40020C0C, 0x40020C14};


Код:
io_p                    0x080002d4  0x18  Data  Lc  main.o [1]

Вы правы. :))) Это из-за указателей.
Я тоже всегда считал, что модификатор const всегда будет указывать на ПЗУ, но тут это не сработало.
Из-за этого и были сомнения.

Вроде и структура объявлена не как volatile:
Код:
typedef struct
{
  __IO uint32_t MODER;    /*!< GPIO port mode register,               Address offset: 0x00      */
  __IO uint32_t OTYPER;   /*!< GPIO port output type register,        Address offset: 0x04      */
  __IO uint32_t OSPEEDR;  /*!< GPIO port output speed register,       Address offset: 0x08      */
  __IO uint32_t PUPDR;    /*!< GPIO port pull-up/pull-down register,  Address offset: 0x0C      */
  __IO uint32_t IDR;      /*!< GPIO port input data register,         Address offset: 0x10      */
  __IO uint32_t ODR;      /*!< GPIO port output data register,        Address offset: 0x14      */
  __IO uint16_t BSRRL;    /*!< GPIO port bit set/reset low register,  Address offset: 0x18      */
  __IO uint16_t BSRRH;    /*!< GPIO port bit set/reset high register, Address offset: 0x1A      */
  __IO uint32_t LCKR;     /*!< GPIO port configuration lock register, Address offset: 0x1C      */
  __IO uint32_t AFR[2];   /*!< GPIO alternate function registers,     Address offset: 0x20-0x24 */
} GPIO_TypeDef;


Но я не обратил внимания на это:
Код:
#define     __IO    volatile             /*!< defines 'read / write' permissions              */

Которое закралось в файле core_cm4.h
Дико извиняюсь. :oops:

_________________
I am DX168B and this is my favourite forum on internet!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Востребована ли простая GUI-библиотека для LCD?
СообщениеДобавлено: Пн дек 24, 2012 06:49:41 
Встал на лапы
Аватар пользователя

Карма: 1
Рейтинг сообщений: 15
Зарегистрирован: Пт янв 21, 2011 14:16:36
Сообщений: 130
Откуда: Уфа
Рейтинг сообщения: 0
Ну, главное что разобрались :)
А с приведением указателей на волатильные структуры к константам во время компиляции и GCC иногда обламывается. (Хотя конкретно этот массив - смог разместить во флеше без проблем).
Ладно, думаю что это уже немного оффтопик в данной теме, давайте закруглимся.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Востребована ли простая GUI-библиотека для LCD?
СообщениеДобавлено: Вт янв 08, 2013 13:21:13 
Мучитель микросхем
Аватар пользователя

Карма: 12
Рейтинг сообщений: 49
Зарегистрирован: Пн фев 22, 2010 09:12:34
Сообщений: 462
Рейтинг сообщения: 0
Сделал более "правильное" отображение скролл-бара при выборе вариантов в Choice

_________________
http://ufa-darts.ru/ - приходи играть в дартс в Уфе


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Востребована ли простая GUI-библиотека для LCD?
СообщениеДобавлено: Сб фев 23, 2013 08:06:47 
Мучитель микросхем
Аватар пользователя

Карма: 12
Рейтинг сообщений: 49
Зарегистрирован: Пн фев 22, 2010 09:12:34
Сообщений: 462
Рейтинг сообщения: 0
Сменилась идеология.
1. Теперь виджет не хранит своё положение и размер для экономии памяти. Размеры и положения теперь задаются в IWidgetVisitor::visit:
Код:
void visit_all_widgets(muil::IWidgetVisitor &visitor)
{
   visitor.visit(label_,    55);
   visitor.visit(test_btn_, 51590, 15);
   visitor.visit(up_down1_, 53540, 15);
   visitor.visit(up_down2_, 50, 3540, 15);
   visitor.visit(ch_box_,   55590, 10);
   visitor.visit(ch_,       57090, 12);
}

Это позволяет сэкономить 8 байт на каждый виджет

2. Координаты и размеры виджетов задаются в процентах относительно ширины и высоты клиентской части экрана. Это позволит проще адаптировать одни и те же окна к разным разрешениям экрана

Ну и по мелочи: виджеты можно раскрашивать. При этом цвет не храниться в самом виджете, а запрашивается каждый раз при отрисовке через WidgetsForm::get_widget_color. Пример раскраски из исходников окна для ввода пина:
Код:
void get_widget_color(const muil::Widget *widget, muil::Color &color)
{
   if (widget == &btn_ent_) color = muil::Color(160, 255, 160);
   else if (widget == &btn_esc_) color = muil::Color(255, 160, 160);
   else if (widget == &btn_clr_) color = muil::Color(180, 180, 180);
}

Скриншот для этого окна:
Изображение

Тут пример окна для ввода ПИНа целиком:
http://muil.googlecode.com/svn/trunk/sa ... INForm.hpp
http://muil.googlecode.com/svn/trunk/sa ... INForm.cpp

Как использовать это окно:
Код:
wchar_t pin[5];
PINForm pin_form(&tahoma14ru_FontInfo, pin, 4);
pin_form.show_modal();
switch (pin_form.get_modal_result())
{
case MR_OK:
   ....
case MR_CANCEL:
   ....
}


Вложения:
muil_en_3.png [5.91 KiB]
Скачиваний: 1630

_________________
http://ufa-darts.ru/ - приходи играть в дартс в Уфе
Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 54 ]    , 2,  

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y