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

 
 
> Keil... Си... Как в памяти программ зарезервировать место и записать значение..., Если кто-то знает не тяните плз...
BFunTic
сообщение Jan 6 2008, 09:50
Сообщение #1





Группа: Новичок
Сообщений: 10
Регистрация: 25-11-07
Пользователь №: 32 675



Привет всем! Опять на форум за помощью...

Помогите плз! Необходимо в память программ записать значение в строго определенное место...
Как только репу не ломал - не компилится... Остался один вариант - найти в прошивке нужные байты и написать патч...

unsigned char code Block_Type _at_ 0x0fff;
unsigned int code Block_Number _at_ 0x1000;
unsigned char code Software_Version _at_ 0x1002;

Необходимо в константы Block_Type, Block_Number, Software_Version записать значения... Как?

Заранее спасибо!!!

Сообщение отредактировал BFunTic - Jan 6 2008, 10:06
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 5)
DASM
сообщение Jan 6 2008, 10:21
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 3 644
Регистрация: 28-05-05
Пользователь №: 5 493



Прямо на С с инициализацией не получится. Сделайте так - добавьте в проект файлик lala.a51
в нем такое например
CSEG AT 0x1000
Block_Number:
db 0xAA
end
;--------------------------------
А там, где переменная нужна на С - напишите
extern volatile unsigned char Block_Number;
и работайте с ней как хотите
Go to the top of the page
 
+Quote Post
_NB
сообщение Jan 6 2008, 12:42
Сообщение #3


Частый гость
**

Группа: Свой
Сообщений: 92
Регистрация: 22-06-05
Из: Украина, г.Боярка
Пользователь №: 6 238



Цитата(BFunTic @ Jan 6 2008, 11:50) *
Привет всем! Опять на форум за помощью...

Помогите плз! Необходимо в память программ записать значение в строго определенное место...
Как только репу не ломал - не компилится... Остался один вариант - найти в прошивке нужные байты и написать патч...

unsigned char code Block_Type _at_ 0x0fff;
unsigned int code Block_Number _at_ 0x1000;
unsigned char code Software_Version _at_ 0x1002;

Необходимо в константы Block_Type, Block_Number, Software_Version записать значения... Как?

Заранее спасибо!!!

Определите эти переменны в отдельном .с -файле
unsigned char code Block_Type;
unsigned int code Block_Number;
unsigned char code Software_Version;
А затем укажите линковщику, на какой адресс линковать это.
Go to the top of the page
 
+Quote Post
DASM
сообщение Jan 6 2008, 12:51
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 3 644
Регистрация: 28-05-05
Пользователь №: 5 493



Это будет сложнее, хотя тоже можно
Go to the top of the page
 
+Quote Post
BFunTic
сообщение Jan 6 2008, 16:27
Сообщение #5





Группа: Новичок
Сообщений: 10
Регистрация: 25-11-07
Пользователь №: 32 675



Цитата(DASM @ Jan 6 2008, 13:21) *
... Сделайте так - добавьте в проект файлик lala.a51
в нем такое например
CSEG AT 0x1000
Block_Number:
db 0xAA
end
;--------------------------------
А там, где переменная нужна на С - напишите
extern volatile unsigned char Block_Number;
и работайте с ней как хотите


Еще раз спасибо, DASM... Такой вариант не покатил... Т.е проект компилился, но в дизассемблере значения на указанных позициях были в нулях! Если в ассемблерном файле переменные обозначить как public - проект не компилировался...
Сделал немного иначе... Создал ассемблеровский файл:

cseg at 0fffh
Properties:
db BLOCK_TYPE // BLOCK_TYPE - определен ранее
dw BLOCK_NUMBER // ...
dw ...


А в Си написал по простому:

unsigned char code Block_Type _at_ 0x0fff;
unsigned int code Block_Number _at_ 0x1000;

Проект компилится с предупреждениями, но на указанных ячейках заданные значения... Хотя думаю, что в других версиях Кеil'a может не работать...



Цитата(_NB @ Jan 6 2008, 15:42) *
А затем укажите линковщику, на какой адресс линковать это.

Как???
Go to the top of the page
 
+Quote Post
DASM
сообщение Jan 6 2008, 17:44
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 3 644
Регистрация: 28-05-05
Пользователь №: 5 493



Странно, у меня прокатил такой вариант, в 8-02 кейле.. никаих public не понадобилось..
Цитата
А затем укажите линковщику, на какой адресс линковать это.

BL51 - use linker control file + курить хелп на линкер smile.gif
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 20:11
Рейтинг@Mail.ru


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