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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Как выделить область памяти?
dinar21
сообщение May 17 2011, 04:42
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 53
Регистрация: 8-02-11
Пользователь №: 62 788



Как выделить область памяти во flash,чтобы компилятор не занимал ее и чтобы во время работы контроллера была возможность записи на нее?


--------------------
Глупых вопросов не бывает, бывают глупые ответы!
Go to the top of the page
 
+Quote Post
alexeyv
сообщение May 17 2011, 05:17
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 298
Регистрация: 26-01-09
Из: Пермь
Пользователь №: 43 940



1. Какой контроллер?
2. Какая среда/язык программирования?
Go to the top of the page
 
+Quote Post
dinar21
сообщение May 17 2011, 05:49
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 53
Регистрация: 8-02-11
Пользователь №: 62 788



AT32UC3B0256, AVR32Studio, C ?

И еще такой вопрос, чтобы на ассемблере писать для этого контроллера в какой среде программирования лучше всего?


--------------------
Глупых вопросов не бывает, бывают глупые ответы!
Go to the top of the page
 
+Quote Post
Dopler
сообщение May 17 2011, 07:35
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 437
Регистрация: 23-04-05
Из: Таганрог
Пользователь №: 4 425



Вам бы досконально изучить примеры, которые я выкладывал в соседней ветке, и таких бы вопросов не возникало. Там в файле скрипта линкера всего десяток строчек, разберитесь в них, и все станет понятно.
Go to the top of the page
 
+Quote Post
dinar21
сообщение May 17 2011, 09:41
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 53
Регистрация: 8-02-11
Пользователь №: 62 788



А как-нибудь в программе контроллера это реализовать нельзя?


--------------------
Глупых вопросов не бывает, бывают глупые ответы!
Go to the top of the page
 
+Quote Post
Dopler
сообщение May 17 2011, 12:45
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 437
Регистрация: 23-04-05
Из: Таганрог
Пользователь №: 4 425



Это зависит от того, что вы понимаете под словом "выделить" и под "возможностью записи". В общем виде компилятор не назначает никаких глобальных адресов, этим занимается компоновщик (linker).
Go to the top of the page
 
+Quote Post
dinar21
сообщение May 18 2011, 02:14
Сообщение #7


Участник
*

Группа: Участник
Сообщений: 53
Регистрация: 8-02-11
Пользователь №: 62 788



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


--------------------
Глупых вопросов не бывает, бывают глупые ответы!
Go to the top of the page
 
+Quote Post
dinar21
сообщение May 18 2011, 05:19
Сообщение #8


Участник
*

Группа: Участник
Сообщений: 53
Регистрация: 8-02-11
Пользователь №: 62 788



Цитата(dinar21 @ May 18 2011, 05:14) *
Выделить, т.е. задать некоторое количество ячеек памяти во flash так,чтобы потом при выполнении программы контроллера можно было попрограммой записать в эти ячейки данные.

Нашел для этого Flash User Page. Осталось разобраться как в него записывать и как обращаться.

Ни у кого нет примера раоты с пользовательской страницей ( Flash User Page) ???


--------------------
Глупых вопросов не бывает, бывают глупые ответы!
Go to the top of the page
 
+Quote Post
msalov
сообщение May 18 2011, 05:50
Сообщение #9


Знающий
****

Группа: Свой
Сообщений: 526
Регистрация: 24-08-07
Из: Беларусь, Минск
Пользователь №: 30 045



Цитата(dinar21 @ May 18 2011, 05:14) *
Выделить, т.е. задать некоторое количество ячеек памяти во flash так,чтобы потом при выполнении программы контроллера можно было попрограммой записать в эти ячейки данные.

Выделить некоторый объём флешь, очень просто - объявите массив нужного размера с нужным выравниванием - вот вам и страница "для личный нужд".
Go to the top of the page
 
+Quote Post
Storejet
сообщение May 18 2011, 06:54
Сообщение #10





Группа: Участник
Сообщений: 12
Регистрация: 17-03-11
Пользователь №: 63 666



Как раз недавно писал кое-что в user page. Сам наковырял что смог из примеров. На идельность не претендую, но если надо могу выложить код.
Go to the top of the page
 
+Quote Post
dinar21
сообщение May 18 2011, 08:38
Сообщение #11


Участник
*

Группа: Участник
Сообщений: 53
Регистрация: 8-02-11
Пользователь №: 62 788



Цитата(Storejet @ May 18 2011, 09:54) *
Как раз недавно писал кое-что в user page. Сам наковырял что смог из примеров. На идельность не претендую, но если надо могу выложить код.

Буду благодарен


--------------------
Глупых вопросов не бывает, бывают глупые ответы!
Go to the top of the page
 
+Quote Post
Storejet
сообщение May 18 2011, 09:51
Сообщение #12





Группа: Участник
Сообщений: 12
Регистрация: 17-03-11
Пользователь №: 63 666



для начала создаем структуру, которая будет размещаться во flash памяти. Я привожу кусок из свое программы, а вообще структура может быть любая.
typedef const struct
{
char Part_number[32];// шифр прибора (ASCII)
char Mnem[4];//мнемоника прибора (ASCII)
char Add_Mnem[4];// дополнительная мнемоника (ASCII)
char Making_Year[4]; //календарный год изготовления прибора (ASCII)
char Defis_1; //Дефис (ASCII)
char Making_Month[2]; //календарный месяц изготовления прибора (ASCII)
char Defis_2; //Дефис (ASCII)
char Making_Day[2];//календарный день изготовления прибора(ASCII)
U8 UIN_Number[2];//Уникальный нмер прибора (HEX)
U8 Sch_Version; //Схемотехническая верся контроллера (HEX)
U8 Soft_Version; //Программная версия контроллера (HEX)
U8 Calibr_Size[4]; //Размер калибровочной записи (HEX)
char Calibr_Name[12]; // Имя калибровочной записи (ASCII)
U8 BLK_Size[4]; // Длина BUF, байт (HEX)
U8 TTO[2]; //TTO , ms (HEX)
U8 FRAM_Size[4]; //длина FRAM, байт (HEX)
U8 SRAM_Size[4]; //Длина SRAM, байт (HEX
U8 Reserved[44]; //Резерв


} nvram_data_t;





//Размещаем структуру идентификатора () в пользовательской странице Flash памяти
__attribute__((__section__(".userpage"))) //".userpage"
static nvram_data_t user_nvram_data;
;




Далее для работы с данными из flash памяти объявляю указатель
nvram_data_t *user_page=&user_nvram_data; // объявляем указатель

Вот некоторые константы, которые будут прописываться в пользовательскую страницу

const char Part_number[32]={'x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x'};// шифр прибора (ASCII)

const char Mnem[4]={'B','K','3','5'};//мнемоника прибора (ASCII)

const char Add_Mnem[4]={' ',' ',' ',' '};// дополнительная мнемоника (ASCII)

const char Making_Year[4]={'2','0','1','1'}; //календарный год изготовления прибора (ASCII)



Функция, которая пропишет константы в пользовательскую страницу:


void ID_write_init (void){

//Смотрим, записано ли что нибудь в пользовательской странице Flash (она будет пуста в новом контроллере)
if (flashc_quick_user_page_read()){
//Записываем во Flash изначальные данные
//Записываем новые данные во flash
flashc_memcpy((void*)&user_page->Part_number,&Part_number,sizeof(user_page->Part_number),TRUE);

flashc_memcpy((void*)&user_page->Mnem,&Mnem,sizeof(user_page->Mnem),TRUE);

flashc_memcpy((void*)&user_page->Add_Mnem,&Add_Mnem,sizeof(user_page->Add_Mnem),TRUE);

flashc_memcpy((void*)&user_page->Making_Year,&Making_Year,sizeof(user_page->Making_Year),TRUE);
}







Если нужно обратиться к данным, размещенным нами в памяти, делаем так:
usart_putchar(USART_ADDR, user_page->Part_number[0]);
usart_putchar(USART_ADDR, user_page->Part_number[1]); ну и так далее

Если что-то не понятно или неправильно, пишите...



Go to the top of the page
 
+Quote Post
dinar21
сообщение May 19 2011, 02:55
Сообщение #13


Участник
*

Группа: Участник
Сообщений: 53
Регистрация: 8-02-11
Пользователь №: 62 788



Цитата(Storejet @ May 18 2011, 12:51) *
U8 UIN_Number[2];//Уникальный нмер прибора (HEX)
U8 Sch_Version; //Схемотехническая верся контроллера (HEX)
U8 Soft_Version; //Программная версия контроллера (HEX)
U8 Calibr_Size[4]; //Размер калибровочной записи (HEX)
U8 TTO[2]; //TTO , ms (HEX)
U8 FRAM_Size[4]; //длина FRAM, байт (HEX)
U8 SRAM_Size[4]; //Длина SRAM, байт (HEX
U8 Reserved[44]; //Резерв


} nvram_data_t;


Что значит U8 ?


--------------------
Глупых вопросов не бывает, бывают глупые ответы!
Go to the top of the page
 
+Quote Post
Storejet
сообщение May 19 2011, 05:37
Сообщение #14





Группа: Участник
Сообщений: 12
Регистрация: 17-03-11
Пользователь №: 63 666



typedef unsigned char U8 -тип данных unsigned char, длина 8 бит
Go to the top of the page
 
+Quote Post
dinar21
сообщение May 19 2011, 08:23
Сообщение #15


Участник
*

Группа: Участник
Сообщений: 53
Регистрация: 8-02-11
Пользователь №: 62 788



Цитата(Storejet @ May 19 2011, 08:37) *
typedef unsigned char U8 -тип данных unsigned char, длина 8 бит

Точно. Туплю.

А нет примера программы прерывания от PWM ?


--------------------
Глупых вопросов не бывает, бывают глупые ответы!
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 7th July 2025 - 03:54
Рейтинг@Mail.ru


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