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

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> AVR-GCC: указатель для адресного пространства более 64К, как?!?!
demiurg_spb
сообщение Oct 26 2010, 06:56
Сообщение #16


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

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



Цитата(IgorKossak @ Oct 26 2010, 10:46) *
В IAR AVR для указателей на дальние области были квалификаторы far (24 бита) и huge (32 бита). Нет ли чего подобного в GCC?

Нет такого в avr-gcc. Указатели ИМХО только 16-и битные.

Но есть макросы:
pgm_read_xxx(address_short)
pgm_read_xxx_far(address_long)


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


Местный
***

Группа: Свой
Сообщений: 370
Регистрация: 7-11-06
Пользователь №: 22 035



Вот к стати народ обсуждает как trampoline секцию использовать для обхода ограничений в разрядности указателей avr-gcc
usage of the trampoline section
Go to the top of the page
 
+Quote Post
ARV
сообщение Oct 26 2010, 08:13
Сообщение #18


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

Группа: Свой
Сообщений: 1 143
Регистрация: 30-09-08
Из: Новочеркасск
Пользователь №: 40 581



Цитата(xelax @ Oct 26 2010, 10:29) *
Нет.. Имено >128к, ибо измеряю память в байтах biggrin.gif Килопопугаи не устраивают, так как меняются от архитектуры к архитектуре.
в avr-gcc любая память адресуется байтами, и флешь тоже, поэтому все-таки 64К предел для 16-битного указателя... это атмеловцы внутри своих даташитов словами ее меряют...

Цитата(xelax @ Oct 26 2010, 10:29) *
Соблюдайте copyright. maniac.gif
ok, учту smile.gif

Цитата(xelax @ Oct 26 2010, 10:29) *
И именно с кодом беда, особенно когда активно используешь указатели на функции. В итоге при попытке вызвать функцию по указателю, расположенную в верхних 128килобайт, программа улетает чёрт знает куда.
с этим не спорю. я как-то озабочен данными и потому вопрос с функциями оставил без внимания


--------------------
Я бы взял частями... но мне надо сразу.
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Oct 26 2010, 11:13
Сообщение #19


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

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



Цитата(ARV @ Oct 26 2010, 12:13) *
в avr-gcc любая память адресуется байтами, и флешь тоже, поэтому все-таки 64К предел для 16-битного указателя... это атмеловцы внутри своих даташитов словами ее меряют...

не всегда:
Код
(*(void(*)(void))(BOOTLOADER_START_ADDRESS/2))();  // div 2 is to convert byte to word addressing mode for icall


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


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

Группа: Свой
Сообщений: 1 143
Регистрация: 30-09-08
Из: Новочеркасск
Пользователь №: 40 581



Цитата(demiurg_spb @ Oct 26 2010, 15:13) *
не всегда:
Код
(*(void(*)(void))(BOOTLOADER_START_ADDRESS/2))();  // div 2 is to convert byte to word addressing mode for icall
по-моему, ваш пример подтверждает мои слова smile.gif
константа BOOTLOADER_START_ADDRESS определена в GCC-шном стиле в байтах, а для icall надо в словах, вот и приходится делить на 2. разве не так?


--------------------
Я бы взял частями... но мне надо сразу.
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Oct 26 2010, 15:22
Сообщение #21


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

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



Цитата(ARV @ Oct 26 2010, 17:07) *
разве не так?

Конечно так - это ведь мой пример и мои каменты:-)

Если бы всё было в GCC-шном стиле, то и делить на 2 не пришлось.
А тут как Вы видите приходится, т.к. адресация функций словная.
Это же компилятор делает вызов функций, а не я на asm'е кропаю.
Я может быть и не хотел бы знать об особенностях адресации в инструкциях call icall, а тем не менее вынужден.

Так что в avr-gcc не вся адресация байтная - и это, судя по форуму, многих сбивает с толку.


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 09:25
Рейтинг@Mail.ru


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