|
Warning[18]:, END of program while in include file C:\ |
|
|
|
Apr 3 2008, 10:23
|
Участник

Группа: Участник
Сообщений: 42
Регистрация: 24-03-08
Пользователь №: 36 192

|
Есть такая программка: NAME slave PUBLIC slave slave: RSEG CODE MEM0: MOV.W #1100h, R12 MOV.W #0000h, R11 MOV.W #2100h, R13 MEMZERO: MOV.W @R11, 0(R12) INCD.W R12 CMP R13,R12 JL MEMZERO nop RETI END она лежит в отдельном файлике и вызывается командой CALL из главной программы. Вроде должно работать, но выдаётся ошибка: Warning[18]: END of program while in include file C:\Document\..\mem0.s43 и Error[e6]: Program module slave redeclared in file C:\Document\..\mem0.s43 Где и что нужно поправить??
|
|
|
|
|
Apr 3 2008, 10:39
|
Участник

Группа: Участник
Сообщений: 42
Регистрация: 24-03-08
Пользователь №: 36 192

|
Я хочу процедуру обнуления оперативы вынести в другой файл и прописать его через #include "xxx" в основном файле ууу. основная программа из файла ууу обращается к подпрограмме лежащей в ххх через call
|
|
|
|
|
Apr 3 2008, 10:43
|
Знающий
   
Группа: Свой
Сообщений: 526
Регистрация: 24-08-07
Из: Беларусь, Минск
Пользователь №: 30 045

|
Цитата(Fynjy86 @ Apr 3 2008, 13:39)  Я хочу процедуру обнуления оперативы вынести в другой файл и прописать его через #include "xxx" в основном файле ууу. основная программа из файла ууу обращается к подпрограмме лежащей в ххх через call Если через #include то END в конце включаемого лишний. И всё таки убедитесь что вам нужна именно инструкция reti в конце функции, а не retМне кажется, обнуление сделано у вас не совем корректно, читая нулевой адрес, вы много не занулите Код mov @R11,0(R12) я бы сделал Код mov R3,0(R12) или Код mov #0,0(R12)
|
|
|
|
|
Apr 3 2008, 11:02
|
Участник

Группа: Участник
Сообщений: 42
Регистрация: 24-03-08
Пользователь №: 36 192

|
Cвёл код к такому виду MEM0: MOV.W #1100h, R12 MOV.W #0000h, R11 MOV.W #2100h, R13 MEMZERO: MOV.W @R11, 0(R12) INCD.W R12 CMP R13,R12 JL MEMZERO nop RET запускаю дебугер, когда доходит до команды CALL, то выдеёт ошибку User error: illegal opcode on address 0x403Ch хотя по этому адресу все нули и ни кокого отношения к программам он не имеет Цитата(gotty @ Apr 3 2008, 13:43)  Если через #include то END в конце включаемого лишний. И всё таки убедитесь что вам нужна именно инструкция reti в конце функции, а не retМне кажется, обнуление сделано у вас не совем корректно, читая нулевой адрес, вы много не занулите Код mov @R11,0(R12) я бы сделал Код mov R3,0(R12) или Код mov #0,0(R12) Возможно вы правы, но нужный мне диапазон обнуляется без продблем. попробую Ваш код, посмотрим, если он быстрее, то попробую его применить.
|
|
|
|
|
Apr 3 2008, 11:07
|
Знающий
   
Группа: Свой
Сообщений: 526
Регистрация: 24-08-07
Из: Беларусь, Минск
Пользователь №: 30 045

|
Цитата(Fynjy86 @ Apr 3 2008, 14:02)  Возможно вы правы, но нужный мне диапазон обнуляется без продблем. попробую Ваш код, посмотрим, если он быстрее, то попробую его применить. вы копируете содержимое ячейки памяти по адресу 0 во все ячейки RAM. А по нулевому адресу у нас что? правильно: Цитата SFR interrupt enable1 IE1 000h
|
|
|
|
|
Apr 3 2008, 11:19
|
Участник

Группа: Участник
Сообщений: 42
Регистрация: 24-03-08
Пользователь №: 36 192

|
Цитата(gotty @ Apr 3 2008, 14:07)  вы копируете содержимое ячейки памяти по адресу 0 во все ячейки RAM. А по нулевому адресу у нас что? правильно:  конечно!! я ошибся, но и мой код работает и Ваш)) тоько ошибка User error: illegal opcode on address 0x403Ch всёравно остаётся
Сообщение отредактировал Fynjy86 - Apr 3 2008, 11:36
|
|
|
|
|
Apr 3 2008, 11:38
|
Участник

Группа: Участник
Сообщений: 42
Регистрация: 24-03-08
Пользователь №: 36 192

|
Цитата(gotty @ Apr 3 2008, 14:36)  Только мой код будет работать всегда, а Ваш -- нет  я свою ошибку понял, что писал в память чёрти что, только этом чёрти что были нули. ваш код верен, но как быть с User error: illegal opcode on address 0x403Ch ??? подскажите плз
|
|
|
|
|
Apr 3 2008, 11:44
|
Участник

Группа: Участник
Сообщений: 42
Регистрация: 24-03-08
Пользователь №: 36 192

|
#include "msp430.h" ; #define controlled include file #include "mem0.s43" NAME main ; module name
PUBLIC main ; make the main label vissible ORG 0FFFEh DC16 main ASEG CODE ORG 2150h main: MOV #20C0h, SP ; set up stack call MEM0
MOV.W #WDTPW+WDTHOLD,&WDTCTL ; Stop watchdog timer JMP $ ; jump to current location '$' ; (endless loop) END
;_подпрограмма из соседнего файлика mem0.s43 MEM0: MOV.W #1100h, R12 MOV.W #2100h, R13 MEMZERO: MOV.W #0, 0(R12) INCD.W R12 CMP R13,R12 JL MEMZERO nop RET
Сообщение отредактировал Fynjy86 - Apr 3 2008, 11:45
|
|
|
|
|
Apr 3 2008, 11:48
|
Знающий
   
Группа: Свой
Сообщений: 526
Регистрация: 24-08-07
Из: Беларусь, Минск
Пользователь №: 30 045

|
Цитата(Fynjy86 @ Apr 3 2008, 14:44)  Не текст программы, В листинге содержатся адреса и коды команд. Пример: Код TACTL = TASSEL1 + TACLR; // SMCLK, Clear TAR 004D04 40B2 0204 0160 mov.w #0x204,&TACTL TACCR0 = 8000-1; // Frequency 1000Hz, XT1 = 8.0 MHz 004D0A 40B2 1F3F 0172 mov.w #0x1F3F,&TACCR0 TACCTL0 = CCIE; // TACCR0 interrupt enabled 004D10 40B2 0010 0162 mov.w #0x10,&TACCTL0 TACCTL1 = CM_3|CCIS1|SCS|CAP; // TACTL1 - software controlled capture mode, trigger - XOR CCIS0 004D16 40B2 E900 0164 mov.w #0xE900,&TACCTL1 TACTL |= MC0; // Start TA up Mode 004D1C D0B2 0010 0160 bis.w #0x10,&TACTL
|
|
|
|
|
Apr 3 2008, 11:52
|
Участник

Группа: Участник
Сообщений: 42
Регистрация: 24-03-08
Пользователь №: 36 192

|
MOV #20C0h, SP ; set up stack main: 002150 4031 20C0 mov.w #0x20C0,SP call MEM0 002154 1290 003A call MEM0 MOV.W #WDTPW+WDTHOLD,&WDTCTL ; Stop watchdog timer _____________________________________________________: 002158 40B2 5A80 0120 mov.w #0x5A80,&WDTCTL JMP $ ; jump to current location '$' 00215E 3FFF jmp 0x215E
Подпрограмма
MEM0: MOV.W #1100h, R12 MEM0: 002190 403C 1100 mov.w #0x1100,R12 MOV.W #2100h, R13 002194 403D 2100 mov.w #0x2100,R13 MEMZERO: MOV.W #0, 0(R12) MEMZERO: 002198 438C 0000 clr.w 0x0(R12) INCD.W R12 00219C 532C incd.w R12 CMP R13,R12 00219E 9D0C cmp.w R13,R12 JL MEMZERO 0021A0 3BFB jl MEMZERO nop 0021A2 4303 nop RET
|
|
|
|
|
Apr 3 2008, 12:00
|
Знающий
   
Группа: Свой
Сообщений: 526
Регистрация: 24-08-07
Из: Беларусь, Минск
Пользователь №: 30 045

|
Цитата(Fynjy86 @ Apr 3 2008, 14:52)  А где же адрес 0x403C ? и как туда переходит программа? P.S. останавливать WDT лучше в самом начале программы
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|