[an error occurred while processing this directive]
keil x51 signed bit fields -- NOT SUPPORTED?
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено Kirill Frolov 26 января 2005 г. 11:47
В ответ на: примерчик можно того, что вы имели ввиду? ;) отправлено Elektronik 26 января 2005 г. 11:36

Демонстрирую пример. Декларация:

struct s_cfg_motor {
signed minpos:7;
[...]
};

volatile int t; /* знаковый тоже */

; ЧТЕНИЕ *БЕЗ РАСШИРЕНИЯ ЗНАКА*
; minpos -- член со знаком
; t=cm->minpos;
; SOURCE LINE # 1189
MOV DPTR,#cm?25158
MOVX A,@DPTR
MOV R3,A
INC DPTR
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
MOV R1,A
LCALL ?C?ILDPTR ; извлекли целую беззнаковую часть
MOV R5,A
MOV R4,B
ANL A,#07FH ; отрезали 7 младших разрядов
MOV R7,A
MOV DPTR,#t?25159
CLR A ; старшая часть РАСШИРЯЕТСЯ НУЛЁМ
MOVX @DPTR,A ; и положили в t
INC DPTR
MOV A,R7
MOVX @DPTR,A ; младшая часть t

; ЗАПИСЬ *БЕЗ ЗНАКА*
; t=-2;
; SOURCE LINE # 1191
MOV DPTR,#t?25159
MOV A,#0FFH
MOVX @DPTR,A
INC DPTR
DEC A
MOVX @DPTR,A
; cm->minpos=t;
; SOURCE LINE # 1192
MOV DPTR,#t?25159+01H
MOVX A,@DPTR
ANL A,#07FH ; отрезали 7 младших бит.
MOV R7,A
MOV A,R5
ANL A,#080H
MOV R5,A
MOV A,R4
MOV R6,A
MOV A,R5
ORL A,R7
MOV R7,A
MOV A,R6
MOV B,R7

ну далее видно, что при знак в старшей части числа
(адрес #t?25159+00H) просто забыли...


ЭТО ГРАБЛИ КОТОРЫЕ РЕАЛЬНО БЬЮТ ПО ЛБУ!
В любом вменяемом компиляторе работает, проверено электроникой.

Составить ответ  |||  Конференция  |||  Архив

Ответы


Отправка ответа

Имя (обязательно): 
Пароль: 
E-mail: 

Тема (обязательно):
Сообщение:

Ссылка на URL: 
Название ссылки: 

URL изображения: 


Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru