реклама на сайте
подробности

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Warning[18]:, END of program while in include file C:\
Fynjy86
сообщение Apr 3 2008, 10:23
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 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
Где и что нужно поправить?? maniac.gif
Go to the top of the page
 
+Quote Post
msalov
сообщение Apr 3 2008, 10:28
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 526
Регистрация: 24-08-07
Из: Беларусь, Минск
Пользователь №: 30 045



Если ваша процедура вызывается из основной программы, то RETI -- совсем не то, что надо.

Каким образом у вас связывают файл основной программы и этот?
Go to the top of the page
 
+Quote Post
Fynjy86
сообщение Apr 3 2008, 10:39
Сообщение #3


Участник
*

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



Я хочу процедуру обнуления оперативы вынести в другой файл и прописать его через #include "xxx"
в основном файле ууу. основная программа из файла ууу обращается к подпрограмме лежащей в ххх через call
Go to the top of the page
 
+Quote Post
msalov
сообщение Apr 3 2008, 10:43
Сообщение #4


Знающий
****

Группа: Свой
Сообщений: 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)
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Apr 3 2008, 10:47
Сообщение #5


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(Fynjy86 @ Apr 3 2008, 13:39) *
Я хочу процедуру обнуления оперативы вынести в другой файл и прописать его через #include "xxx"
Тогда уберите из него END. Текст этого файла просто вставляется по #include в основной исходник и компилятор встречает там END. END должен быть один в конце основного файла. Непонятно, зачем вы включаете этот файл по #include. Вам надо его просто добавить в проект как отдельный файл, а в основном написать extern slave (или import slave, посмотрите в описани компилятора). Через #include обычно подключется файл, содержащий макросы.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Fynjy86
сообщение Apr 3 2008, 11:02
Сообщение #6


Участник
*

Группа: Участник
Сообщений: 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)

Возможно вы правы, но нужный мне диапазон обнуляется без продблем.
попробую Ваш код, посмотрим, если он быстрее, то попробую его применить.
Go to the top of the page
 
+Quote Post
msalov
сообщение Apr 3 2008, 11:07
Сообщение #7


Знающий
****

Группа: Свой
Сообщений: 526
Регистрация: 24-08-07
Из: Беларусь, Минск
Пользователь №: 30 045



Цитата(Fynjy86 @ Apr 3 2008, 14:02) *
Возможно вы правы, но нужный мне диапазон обнуляется без продблем.
попробую Ваш код, посмотрим, если он быстрее, то попробую его применить.


вы копируете содержимое ячейки памяти по адресу 0 во все ячейки RAM. А по нулевому адресу у нас что? правильно:
Цитата
SFR interrupt enable1 IE1 000h
Go to the top of the page
 
+Quote Post
Fynjy86
сообщение Apr 3 2008, 11:19
Сообщение #8


Участник
*

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



Цитата(gotty @ Apr 3 2008, 14:07) *
вы копируете содержимое ячейки памяти по адресу 0 во все ячейки RAM. А по нулевому адресу у нас что? правильно:

lol.gifконечно!! я ошибся, но и мой код работает и Ваш))
тоько ошибка User error: illegal opcode on address 0x403Ch всёравно остаётся

Сообщение отредактировал Fynjy86 - Apr 3 2008, 11:36
Go to the top of the page
 
+Quote Post
msalov
сообщение Apr 3 2008, 11:36
Сообщение #9


Знающий
****

Группа: Свой
Сообщений: 526
Регистрация: 24-08-07
Из: Беларусь, Минск
Пользователь №: 30 045



Цитата(Fynjy86 @ Apr 3 2008, 14:19) *
lol.gifконечно!! я ошибся, но и мой код работает и Ваш))

Только мой код будет работать всегда, а Ваш -- нет wink.gif
Go to the top of the page
 
+Quote Post
Fynjy86
сообщение Apr 3 2008, 11:38
Сообщение #10


Участник
*

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



Цитата(gotty @ Apr 3 2008, 14:36) *
Только мой код будет работать всегда, а Ваш -- нет wink.gif

я свою ошибку понял, что писал в память чёрти что, только этом чёрти что были нули.
ваш код верен, но как быть с User error: illegal opcode on address 0x403Ch ???
подскажите плз
Go to the top of the page
 
+Quote Post
msalov
сообщение Apr 3 2008, 11:39
Сообщение #11


Знающий
****

Группа: Свой
Сообщений: 526
Регистрация: 24-08-07
Из: Беларусь, Минск
Пользователь №: 30 045



Цитата(Fynjy86 @ Apr 3 2008, 14:38) *
я свою ошибку понял, что писал в память чёрти что, только этом чёрти что были нули.
ваш код верен, но как быть с User error: illegal opcode on address 0x403Ch ???
подскажите плз

а вы листинг приведите, и когда будете вставлять в сообщение, не забудьте про тег [code]
Go to the top of the page
 
+Quote Post
Fynjy86
сообщение Apr 3 2008, 11:44
Сообщение #12


Участник
*

Группа: Участник
Сообщений: 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
Go to the top of the page
 
+Quote Post
msalov
сообщение Apr 3 2008, 11:48
Сообщение #13


Знающий
****

Группа: Свой
Сообщений: 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
Go to the top of the page
 
+Quote Post
Fynjy86
сообщение Apr 3 2008, 11:52
Сообщение #14


Участник
*

Группа: Участник
Сообщений: 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
Go to the top of the page
 
+Quote Post
msalov
сообщение Apr 3 2008, 12:00
Сообщение #15


Знающий
****

Группа: Свой
Сообщений: 526
Регистрация: 24-08-07
Из: Беларусь, Минск
Пользователь №: 30 045



Цитата(Fynjy86 @ Apr 3 2008, 14:52) *


А где же адрес 0x403C ? и как туда переходит программа?
P.S. останавливать WDT лучше в самом начале программы
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 27th July 2025 - 23:52
Рейтинг@Mail.ru


Страница сгенерированна за 0.01456 секунд с 7
ELECTRONIX ©2004-2016