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

 
 
> Вопрос по HI-Tech C, Помогите разобраться...
DenisIV
сообщение Apr 12 2009, 11:10
Сообщение #1


Участник
*

Группа: Свой
Сообщений: 68
Регистрация: 11-12-08
Из: Республика Беларусь, г.Минск
Пользователь №: 42 380



Вобщем есть такой вопросик:
Есть подпрограмма(функция или процедура-не важно).
В ней таблица вида
Код
void Table1(void)
{
#asm
dw 0x3FF,0x3FF// и так далее...
#endasm
}

почему asm,dw 0x... спросите вы: для того, что бы я мог использовать все 14 бит flash памяти. можно задать как массив во флэш,но при реализации компилятор сделает таблицу вида:
Код
retlw 0xFF
retlw 0x1F

и т.д.

собственно, сам вопрос: как можно считать эти данные внутри функции Table1 и если не вызывается данная функция, как заставить компилятор её не исключать при сборке.

Считать флэш у меня получается, а присвоить присвоить переменной адрес функции-не получается.
Да, проц = PIC16F876A и(или) PIC16F886

Сообщение отредактировал DenisIV - Apr 12 2009, 11:11
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
DenisIV
сообщение Apr 14 2009, 01:27
Сообщение #2


Участник
*

Группа: Свой
Сообщений: 68
Регистрация: 11-12-08
Из: Республика Беларусь, г.Минск
Пользователь №: 42 380



Ясно. ну в этом случае мне выгоднее использовать конструкцию, которую я ранее приводил, когда я вызываю функцию, а в теле функции асмом отдаётся собственный код адреса и далее dw 0x.. и т.д.

Да, позвольте дать совет не использовать конструкции вида
Код
asm ('movlw 0x00');
asm ('movwf MyVar');

дело в том, что компилятор когда начинает свою оптимизацию, может вообще поменять местами ваши команды по своему усмотрению.
лечше используйте блоками:
Код
#asm
movlw 0x00
movwf MyVar
#endasm

Это хоть какая-то гарантия будет от перемешивания команд... (IAR для AVR точно очень любит такие фокусы, я насмотрелся...)
Ну тема с доступом к массиву полагаю,закрыта...
Хотелось бы ещё спросить про аппаратный I2C мастер. У меня ну никак не получилось заставить его работать. Может какие тонкости есть в этом деле?
Я попытался повторить эту демку на PIC16F886 и сколько не бился, так и не смог запустить аппаратно I2C. Пришлось программно симулировать.
В даташите вроде не отличаются I2C у 876A и 886.
Go to the top of the page
 
+Quote Post



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

 


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


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