Добрый вечер!
Можете пожалуйста подсказать ответ на несколько вопросов по MPASM под
PIC18F4585.
Подскажите пожалуйста, директива микроассемблера udata может использоваться в случае если я хочу обращаться к инициализированным с её помощью переменным таким образом:
|
Код:
|
udata
SUB_reg res 4
CODE
LFSR FSR0, SUB_reg
movlw .4
movwf count
TX_byte movff POSTINC0,SSPBUF ; отправляем байт
btfss SSPSTAT,BF ; ждём отправки первого байта
bra $-2 ; ждём...
decfsz count ; декрементируем счётчик байтов
bra TX_byte ; если передали не все байты - повтор |
Этот код работает, просто создаваемый мною проект будет сильно разрастаться и соответственно будет съедено много оперативной памяти, не случится ли ситуация что переменная SUB_reg, под который зарезервировано 4 байта будет состоять не из последовательно размещенных 4-х байтов в ОЗУ, а они будут разбросаны, следовательно когда я буду обращаться к виртуальному регистру POSTINC0, то после обращения к нему FSR0 будет указывать не на следующий байт переменной SUB_reg, а на чёрт знает что? И ещё.
1.Что если я использую почти всю память и не останется четырех рядом размещенных ячеек?
2.Могу ли я с помощью директивы разместить переменную в области памяти доступа (использую PIC18F4585) и одновременно чтобы переменная инициализировалась так чтобы при вызове другой подпрограммы на месте этой переменной могли быть инициализированы другие переменные (по аналогии с udata_ovr)? Или используя udata_acc мы не имеем ни малейшего представления куда ассемблер запишет эту переменную, т.е. перед обращением к ней нужно выбрать соответствующий банк памяти с помощью директивы banksel?