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

 
 
> WinAVR и переменные
Guest_Serg79_*
сообщение Sep 27 2006, 07:21
Сообщение #1





Guests






Как разместить глобальную переменную по определенному адресу в памяти, при использовании WinAVR.
Например:
Код
/*
* Нужно разместить по адресу 0x0110
*/
char flag;

Как мне это сделать?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
otrog
сообщение Sep 27 2006, 09:10
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 232
Регистрация: 22-02-06
Из: Воронеж
Пользователь №: 14 589



Для IAR-а делал так:
Код
#define r_mode  (* (char *) 0x8000) /* Declare a memory mapped I/O address*/

Попробуйте так:
Код
#define flag  (* (char *) 0x0110) /* Declare a memory mapped I/O address*/


--------------------
Истина рождается в спорах; но когда страсти кипят, истина испаряется.
Go to the top of the page
 
+Quote Post
Guest_Serg79_*
сообщение Sep 27 2006, 09:53
Сообщение #3





Guests






Цитата(otrog @ Sep 27 2006, 13:10) *
Для IAR-а делал так:
Код
#define r_mode  (* (char *) 0x8000) /* Declare a memory mapped I/O address*/

Попробуйте так:
Код
#define flag  (* (char *) 0x0110) /* Declare a memory mapped I/O address*/

Это то же самое что и
Код
#define _MMIO_BYTE(mem_addr) (*(volatile uint8_t *)(mem_addr))

Это просто тычек пальцем в память по определенному адресу, а откуда я знаю что компилятор разместил по этому адресу. Там может быть как глобальная так и статическая переменная, а может и ни чего не быть.

А мне надо имеено зарезервировать участок памяти определенного размера и по определенному адрессу. И что бы компилятор не использовал больше этот диапозон памяти под свои нужды.

Может кто знает как сдвинуть ".data" секцию вниз на пример на 8 байтов. Что бы скажем она уже начиналась не с адреса 0х0100 а с 0х0108.

Сообщение отредактировал Serg79 - Sep 27 2006, 09:54
Go to the top of the page
 
+Quote Post
Harvester
сообщение Sep 27 2006, 11:47
Сообщение #4


Местный
***

Группа: Участник
Сообщений: 338
Регистрация: 1-02-06
Из: Королев, М.О.
Пользователь №: 13 846



Цитата(Serg79 @ Sep 27 2006, 13:53) *
Цитата(otrog @ Sep 27 2006, 13:10) *

Для IAR-а делал так:
Код
#define r_mode  (* (char *) 0x8000) /* Declare a memory mapped I/O address*/

Попробуйте так:
Код
#define flag  (* (char *) 0x0110) /* Declare a memory mapped I/O address*/

Это то же самое что и
Код
#define _MMIO_BYTE(mem_addr) (*(volatile uint8_t *)(mem_addr))

...

А мне надо имеено зарезервировать участок памяти определенного размера и по определенному адрессу. И что бы компилятор не использовал больше этот диапозон памяти под свои нужды.

Может кто знает как сдвинуть ".data" секцию вниз на пример на 8 байтов. Что бы скажем она уже начиналась не с адреса 0х0100 а с 0х0108.

Вообще-то этим занимается не компилятор а компоновщик (linker). Соответственно все эти секции настраиваются в файле .xcl. А затем дефайном на зарезервированный участок.
Код
#define my_sect 0x....
....

char *ptr = (char *)my_sect;



Кстати, вот фрагмент такого файла (для нестандартной mega103):
Код
-D_..X_INTVEC_SIZE=60   /* 24 Interrupt vectors * 4 bytes each */
-D_..X_FLASH_TEND=FF    /* End of tiny flash memory */
-D_..X_FLASH_NEND=FFFF  /* End of near flash memory */
-D_..X_FLASH_END=1FFFF  /* End of flash memory */
/* Internal data memory */
-D_..X_SRAM_BASE=da00     /* Start of ram memory */
-D_..X_SRAM_TEND=daFF     /* End of tiny ram memory */

-D_..X_SRAM_END=dfff     /* End of ram memory */
/* Internal EEPROM */
-D_..X_EEPROM_END=FFF   /* End of eeprom memory */

За счет этих строк компилятор использует ОЗУ, начиная с адреса 0xda00. А вот строки из программы:
включаемый файл:
Код
//memory definition
#define mem_endP0In             0xc000
#define mem_endP0Out             0xc010

программа:
Код
volatile usb_ctrlrequest_t *usb_ctrl_req;
...
usb_ctrl_req=(usb_ctrlrequest_t *)mem_endP0In;

PS. На конкретные значения адресов не удивляйтесь, это не реальный контроллер, а ядро в ASIC-е


--------------------
-Да как так-то?/-Да как-то так/-Ну так-то да
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Serg79   WinAVR и переменные   Sep 27 2006, 07:21
- - Сергей Борщ   Цитата(Serg79 @ Sep 27 2006, 10:21) Как р...   Sep 27 2006, 08:30
|- - Serg79   Цитата(Сергей Борщ @ Sep 27 2006, 12:30) ...   Sep 27 2006, 08:59
- - Serg79   Народ, не ужели ни кто не знает как это сделать. Д...   Sep 27 2006, 08:36
- - Serg79   Представляете, в отстойном CodeVision это можно сд...   Sep 27 2006, 11:06
|- - IgorKossak   Цитата(Serg79 @ Sep 27 2006, 14:06) Вы мн...   Sep 27 2006, 11:25
|- - otrog   Цитата(Serg79 @ Sep 27 2006, 15:06) Вы мн...   Sep 27 2006, 11:27
- - Tiro   Ну прочтите же, наконец, документацию! Пере...   Sep 27 2006, 11:32
- - aesok   Цитата(Serg79 @ Sep 27 2006, 11:21) Как р...   Sep 27 2006, 11:37
|- - defunct   Цитата(aesok @ Sep 27 2006, 14:37) Язык ...   Sep 28 2006, 23:50
|- - IgorKossak   Цитата(defunct @ Sep 29 2006, 02:50) Цита...   Sep 29 2006, 06:50
|- - aesok   Цитата(defunct @ Sep 29 2006, 03:50) Цита...   Sep 29 2006, 07:12
- - AVR_Amator   По WinAVR есть очень любопытные сайты http://avr....   Oct 12 2006, 14:58


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

 


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


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