Полная версия этой страницы:
Есть вопрос
mpavela2011
Apr 25 2011, 12:36
В одном файле есть вот это
?XD?f91x SEGMENT XDATA INPAGE ; define a SEGMENT of class XDATA
RSEG ?XD?f91x
PUBLIC U1_RAM,START_U1,TEST_U1
U1_RAM: DS 1
START_U1: DS 1 ;
T1U: DS 2 ;
T_U1: DS ;
IRTHU1: DS 2 ;
TEST_U1: DS 1
В другом файле вот это
$NOLIST
$INCLUDE(C8051F120.INC) ;
$INCLUDE(Conf_Prot.INC) ;
$LIST
PUBLIC FUNC
EXTRN DATA(AMPL1H,AMPL2H,AMPL3H,AMPL0H,I2)
EXTRN DATA(VOLTABH,VOLTACH,VOLTBCH,VOLT0H,U2)
EXTRN BIT(CONS_TIME,TST_SRAB)
EXTRN XDATA(INP_RAM_SPA,IN_SGC,LSH_RAM,LOGIC_RAM,U2_M_RAM,SGF6,U1_RAM)
;EXTRN XDATA (SGF6,U1_RAM)
EXTRN IDATA(Imax,Imin,INP_VAL)
;if F_FREQ ;-MPA
EXTRN DATA(FREQ)
Почему такая ошибка ????
*** WARNING L1: UNRESOLVED EXTERNAL SYMBOL
SYMBOL: U1_RAM
MODULE: A_FUNC.OBJ (A_FUNC)
Ведь Переменная U1_RAM в одном файле обьявлена как PUBLIC а в другом как EXTRN - все должно быть нормально
Пишу КОД для силикиносвского процессора С8051F120 в среде Silabs IDE
mpavela2011
Apr 26 2011, 06:10
Товарищи программисты, неужели мне ничем нельзя помочь ????
компилятор ругается на второй файл, где написано
EXTRN XDATA(INP_RAM_SPA,IN_SGC,LSH_RAM,LOGIC_RAM,U2_M_RAM,SGF6,U1_RAM)
А вы объектник от первого файла на линковку подать не забыли?
mpavela2011
Apr 26 2011, 07:40
if OVER_U2
EXTRN CODE(TRIP_U2_M)
EXTRN XDATA(U2_M_RAM)
CLR F1
LCALL TRIP_U2_M ;
;endif1
EXTRN XDATA (U2_M_RAM) ;
EXTRN XDATA (SGF6,U1_RAM) ;
MOV DPTR,#U1_RAM
MOVX A,@DPTR
;CLR ACC.1 ;
MOV C,ACC.1 ;
MOV DPTR,#SGF6
MOVX A,@DPTR
;CLR ACC.4 ;
ANL C,ACC.4 ;
MOV DPTR,#U2_M_RAM
MOVX A,@DPTR
ORL C,ACC.1 ;
MOV DPTR,#IN_SGC+1 ;
MOVX A,@DPTR
ORL C,ACC.5 ;
CPL C
MOV F1,C
;else
; CPL F1 ;
endif2
так все нормально, но мне нужно не так, мне нужно чтобы endif2 был закоментирован, а endif1 раскоменитрован - так появляются предупреждения !
XVR, первый файл на линковку подается - все нором проверил.
акцентирую внимание что компилятор ругается на переменную U1_RAM
С Silabs не работал, в том, что приведено криминала не вижу, увы
mpavela2011
Apr 26 2011, 08:01
если в первом файле
XD?f91x SEGMENT XDATA INPAGE ; define a SEGMENT of class XDATA
RSEG ?XD?f91x
PUBLIC U1_RAM,START_U1,TEST_U1
может быть во втором файле после EXTRN надо писать другой тип - какой ?
Уважаемые коллеги, есть ли ограничение на количество параметров передаваемых в функцию?
Цитата(дымок @ Jun 25 2011, 19:03)

Уважаемые коллеги, есть ли ограничение на количество параметров передаваемых в функцию?
Это вы о чем? Какая функция? Какие параметры?
Цитата(XVR @ Jun 26 2011, 00:37)

Это вы о чем? Какая функция? Какие параметры?
Прошу прощения если я не внятно задал вопрос но в учебнике описано такое правило описания функций:
тип_возвращаемого_значения имя_функции(список_параметров,...,...)
есть ли ограничение в количестве аргументов в списке параметров?
Цитата(дымок @ Jun 26 2011, 15:25)

тип_возвращаемого_значения имя_функции(список_параметров,...,...)
есть ли ограничение в количестве аргументов в списке параметров?
Стандарт языка С количество параметров не ограничивает. Конкретные реализации компиляторов на конкретные семейства МК могут иметь какие то ограничения (лично мне таковые неизвестны)
Цитата(XVR @ Jun 26 2011, 21:51)

Стандарт языка С количество параметров не ограничивает.
Спасибо, что развеяли мои сомнения.
demiurg_spb
Jun 26 2011, 17:31
Может не совсем в тему...
Если возникает такой вопрос, смею предположить, что у Вас недоработочка архитектуры программы.
Вы о структурах слыхали?

Объявляете структуру с любым кол-вом полей и передаёте в функцию указатель на неё.
На мой взгляд так симпатичнее и эффективнее.
Удачи!
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.