|
Помогите разобраться с CV, выдаёт ошибку при компи, где в коротком примере на Си я ошибся? |
|
|
|
Apr 12 2005, 17:56
|
Профессионал
    
Группа: Свой
Сообщений: 1 357
Регистрация: 12-04-05
Из: Петербург
Пользователь №: 4 079

|
#include <90s2313.h> #include <delay.h>
void LCD (unsigned char temp, unsigned char temp1){ unsigned char temp2 #asm outind: //temp1- адрес, temp2- данные
//запись адреса LCD_WA: mov temp,temp1 andi temp,0x0f ori temp,0x10 out portb,temp nop nop cbi portb, WR1 sbi portb, A0 //запись данных (запись тетрады) LCD_WN: mov temp,temp2 //запись младшей тетрады andi temp,0x0f ori temp,0x30 out portb,temp nop nop cbi portb, WR1 nop nop swap temp2 //запись старшей тетрады mov temp,temp2 andi temp,0x0f ori temp,0x30 out portb,temp nop nop cbi portb, WR1 ret #endasm } void main(void) { DDRB = 0x20; // 0010 0000 output pin pb5 LCD (2,3);
}
я назвал переменные темп, затем сразу пишу на асме, выдаёт ошибку, что- то там про мои переменные говорит, не знаю в чём дело, может нельзя так делать?
|
|
|
|
|
 |
Ответов
(1 - 5)
|
Apr 14 2005, 05:43
|
Знающий
   
Группа: Свой
Сообщений: 550
Регистрация: 16-06-04
Из: Казань
Пользователь №: 32

|
Цитата(yung @ Apr 14 2005, 09:02) Компилятор все переменные размещает в ОЗУ, в то время как практически все команды ассемблера работают только с регистрами (mov, andi и т.д.). Если хочется сделать все это на ассемблере, то необходимо все эти переменные предварительно перегнать в регистры, а затем (при выходе из асма) - вернуть обратно. Вообще говоря, неверно; CV по умолчанию размещает часть глобальных переменных в нижних регистрах. Локальные переменные, сколько получится, размещаются в r16-r21, остальные - на стеке данных, там же, где и параметры функций. Цитата(yung @ Apr 14 2005, 09:02) И не забудь использованные регистры сохранить в стеке при входе и забрать их при выходе. Но боюсь, что даже в этом случае могут начаться чудеса при Сишных прерываниях (какие-то из использованных регистров могут быть задействованы и там, и не факт, что Си вернет их обратно). Регистры r0,r1,r22-r27,r30,r31 в функции можно не сохранять, CV использует их, как временные. К прерываниям это, разумеется, не относится
--------------------
Главная линия этого опуса ясна мне насквозь!
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|