Erro "Processor Stack Fault"

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

Glauco Cruz Costa
Usuário Nível 3
Usuário Nível 3
Mensagens: 102
Registrado em: 15 Dez 2005 22:02
Localização: Brasília/DF
Contato:

Erro "Processor Stack Fault"

Mensagem por Glauco Cruz Costa »

:| Estou com um problema na função abaixo. Quando eu pressiono f5, para pesquisar, após preencher o campo crondalfa, a prinpípio dá certo. Mas, ao se repetir o procedimento várias vezes, ocorre o erro: Undecoverable error 650: Processor Stack Fault.
Já pesquisei sobre o erro. Isso se dá pelo fato de estar-se chamando a função inn repeditas vezes. E o programa não está suportando.
Há como deixar o programa como está, mas dando algum jeito de não dar esse erro mais?
Ou qual outra solução simples posso usar?
Eu chamo a procedure INN para que ela reinicie e mostre os dados escolhidos pelo usuário para que ele possa trabalhar. Toda hora sai da INN e volta chamando-a...
Obrigado.

Abaixo, algumas partes do programa:
MATRI = SPACE(7) // REPLICATE(".",7) //SPACE(7)
CRO = SPACE(10)
SOBREN = SPACE(15)
SEX = SPACE(1)
TEL = SPACE(9) //"....-...."
NOM = SPACE(34)
DATN = CTOD(" / / ")
END = SPACE(34)
U = SPACE(2)
PA = SPACE(34)
MA = SPACE(34)
OBS = SPACE(59)
OBS2 = SPACE(72)
DATAH = DATE()
INN()








// CADASTRO
PROCEDURE INN
DO WHILE .T.

//READINSERT(.T.)
SET DELIMITERS ON // PARA ATIVAR O DE BAIXO
SET DELIMITERS TO "[]" // PARA ESCOLHER A MASCARA DO GET
// SET INTENSITY OFF // PARA TIRAR O BRANCO DOS GETS
#INCLUDE "SETCURS.CH" // PARA FUNCIONAR SETCURSOR()
SETCURSOR(SC_INSERT) // SC_INSERT FICA CURSOR PELA METADE. SC_SPECIAL1 FICA CURSOR CHEIO
CLS

SET KEY 28 TO IN()
SET KEY -1 TO IM()
SET KEY -2 TO AL()
SET KEY -3 TO EX()
SET KEY -4 TO PE()
SET KEY -7 TO LI()
SET KEY -41 TO SA()
@ 00,00 TO 24,79
@ 02,30 SAY "CADASTRO DE PACIENTES"

@ 05,31 SAY "INIC.: [..........]"
// @ 05,53 SAY "[P]"
@ 05,61 SAY "DATA:" + DTOC(DATAH)
@ 07,03 SAY "SOBRENOME: [...............]"
@ 07,35 SAY "SEXO: [.]"
@ 07,45 SAY "(M/F)"
@ 07,53 SAY "TELEFONE..: [....-....]"
@ 09,03 SAY "NOME.....: [..................................]"
@ 09,53 SAY "DATA NASC.: [ / / ]"
@ 15,03 SAY "ENDERECO.: [..................................]"
@ 15,53 SAY "UF: [..]"
@ 11,03 SAY "FILIACAO.: [..................................]"
@ 11,53 SAY "(PAI)"
@ 13,14 SAY "[..................................]"
@ 13,53 SAY "(MAE)"
@ 17,03 SAY "OBSERVACOES: [...........................................................]"
@ 19,03 SAY "[........................................................................]"
@ 23,02 SAY "F1-INCLUI F2-IMPRIME F3-ALTERA F4-EXCLUI F5-PESQUISA F8-LIMPA F12-SAI"
@ 05,03 SAY "MATRICULA: [.......]"
@ 05,14 GET MATRI PICT "@!"
READEXIT(.T.) // PARA PODER SAIR DO GET COM SETA, COMO SE FOSSE ENTER
READ
/* IF LASTKEY() = -9
RETURN
ENDIF */
GO TOP
LOCATE FOR MATRICULA = MATRI
IF FOUND()
MATRI = MATRICULA
CRO = CRONDALFA
SEX = SEXO
TEL = TELEFONE
NOM = NOME
SOBREN = SOBRENOME
DATN = CTOD(DATA)
END = ENDERECO
U = UF
PA = PAI
MA = MAE
OBS = OBSERV1
OBS2 = OBSERV2
@ 05,67 SAY " "
DATAH = CTOD(DATAHOJE)
ENDIF
DO WHILE .T.
SAVE SCREEN TO INCLU
/* IF LASTKEY() = -9
RETURN
ENDIF */
IF LASTKEY() = -7
EXIT
ENDIF
@ 00,00 TO 24,79
@ 02,30 SAY "CADASTRO DE PACIENTES"
@ 05,14 GET MATRI PICT "@!"
@ 05,38 GET CRO PICT "@!" // WHEN VER()
// @ 05,54 GET CAR PICT "@!"
@ 05,66 SAY DATAH
/* IF DATAH = SPACE(10) // !EMPT(DATAH)
@ 05,61 SAY "DATA: " + DATAHOJE
ELSE
@ 05,61 SAY "DATA: " + DTOC(DATE())
ENDIF
*/
@ 07,14 GET SOBREN PICT "@!" // valid testGet( SOBREN )
@ 07,41 GET SEX PICT "@!" VALID SEX $ "MF. "
@ 07,45 SAY "(M/F)"
@ 07,65 GET TEL PICT "9999-9999"
@ 09,14 GET NOM PICT "@!" // valid testGet( NOM )
@ 09,65 GET DATN
@ 11,14 GET PA PICT "@!" // valid testGet( PA )
@ 11,53 SAY "(PAI)"
@ 13,14 GET MA PICT "@!" // valid testGet( MA )
@ 13,53 SAY "(MAE)"
@ 15,14 GET END PICT "@!"
@ 15,57 GET U PICT "@!" // valid testGet( U )
@ 17,16 GET OBS PICT "@!"
@ 19,03 GET OBS2 PICT "@!"
@ 23,02 SAY "F1-INCLUI F2-IMPRIME F3-ALTERA F4-EXCLUI F5-PESQUISA F8-LIMPA F12-SAI"
KEYBOARD CHR(13)
READ
ENDDO

ENDDO




//FUNCOES PARA AS PESQUISAS
FUNCTION PESQ5
// SETCOLOR("N/W")
IF LASTKEY() = 13
MATRI = MATRICULA
KEYBOARD CHR(23) // + CHR(23) + CHR(23)+ CHR(23)+ CHR(23)+ CHR(23)+ CHR(23)+ CHR(23)+ CHR(23)+

CHR(23)+ CHR(23) + CHR(23) + CHR(23) // CHR(5) + // KEYBOARD - COMO UM PRESSIONAR UMA TECLA
SET FILTER TO
INN()
RETURN(0)
ENDIF
IF LASTKEY() = 27
RESTORE SCREEN FROM INCLU
SET FILTER TO
RETURN(0)
ENDIF

FUNCTION PESQ9
// SETCOLOR("N/W")
IF LASTKEY() = 13
MATRI = MATRICULA
KEYBOARD CHR(23) + CHR(23) + CHR(23)+ CHR(23) + CHR(23) // + CHR(23)+ CHR(23)+ CHR(23)+ CHR(23)+

CHR(23)+ CHR(23) + CHR(23) + CHR(23) // CHR(5) + // KEYBOARD - COMO UM PRESSIONAR UMA TECLA
SET FILTER TO
INN()
RETURN(0)
ENDIF
IF LASTKEY() = 27
RESTORE SCREEN FROM INCLU
SET FILTER TO
RETURN(0)
ENDIF

FUNCTION PESQ7
// SETCOLOR("N/W")
IF LASTKEY() = 13
MATRI = MATRICULA
KEYBOARD CHR(23) + CHR(23) + CHR(23)+ CHR(23) + CHR(23) + CHR(23)+ CHR(23) // + CHR(23)+

CHR(23)+ CHR(23)+ CHR(23) + CHR(23) + CHR(23) // CHR(5) + // KEYBOARD - COMO UM PRESSIONAR

UMA TECLA
SET FILTER TO
INN()
RETURN(0)
ENDIF
IF LASTKEY() = 27
RESTORE SCREEN FROM INCLU
SET FILTER TO
RETURN(0)
ENDIF





// PESQUISAR

PROCEDURE PE
SAVE SCREEN TO INCLU
IF ROW() = 5 // A FUNCAO ROW() FORNECE O NR. DA LINHA NA QUAL ESTA POSICIONADO O CURSOR NA TELA.
IF EMPT(CRO)
@ 21,05 SAY "*** CRONDALFA VAZIO ***"
INKEY(1)
@ 21,05 SAY " "
RESTORE SCREEN FROM INCLU
RETURN
ENDIF
GO TOP
LOCATE FOR CRONDALFA = CRO
IF .NOT. FOUND()
RESTORE SCREEN FROM INCLU
KEYBOARD CHR(19) + CHR(19) + CHR(19)+ CHR(19)+ CHR(19)+ CHR(19)+ CHR(19)+ CHR(19)+ CHR(19)+

CHR(19) // CHR(5) + // KEYBOARD - COMO UM PRESSIONAR UMA TECLA
RETURN
ELSE
PRIVATE V1[3]
V1[01] = "MATRICULA"
V1[02] = "NOME"
V1[03] = "DATA"
SET FILTER TO CRONDALFA = CRO
DBGOTOP()
@ 09,04 CLEAR TO 21,71
@ 09,04 TO 21,71
DBEDIT(10,05,20,70,V1,"PESQ5")
ENDIF
ENDIF
Editado pela última vez por Glauco Cruz Costa em 18 Jul 2006 00:11, em um total de 1 vez.
Dudu_XBase
Membro Master
Membro Master
Mensagens: 1071
Registrado em: 25 Ago 2003 16:55

Mensagem por Dudu_XBase »

Bom dia.
Poste seu lnk.


________________________________________________________________________________________________________
(Aow Saudade) Clipper 5.2e, Blinker 7, RDD SIXNSX, DBFCDX /Xharbour 1.0, Rdd Mediator (Mysql) Free , RDD Sqlrdd (Sql Server) Comercial
(Hoje) C# Python Sql Server e Oracle




Glauco Cruz Costa
Usuário Nível 3
Usuário Nível 3
Mensagens: 102
Registrado em: 15 Dez 2005 22:02
Localização: Brasília/DF
Contato:

Mensagem por Glauco Cruz Costa »

Dudu_XBase escreveu:Bom dia.
Poste seu lnk.
;) O que seria o lnk?
Dudu_XBase
Membro Master
Membro Master
Mensagens: 1071
Registrado em: 25 Ago 2003 16:55

Mensagem por Dudu_XBase »

bom dia.
Vc usa blinker ?
Lnk é um arquivo de linkedição usado por ele.


________________________________________________________________________________________________________
(Aow Saudade) Clipper 5.2e, Blinker 7, RDD SIXNSX, DBFCDX /Xharbour 1.0, Rdd Mediator (Mysql) Free , RDD Sqlrdd (Sql Server) Comercial
(Hoje) C# Python Sql Server e Oracle




Glauco Cruz Costa
Usuário Nível 3
Usuário Nível 3
Mensagens: 102
Registrado em: 15 Dez 2005 22:02
Localização: Brasília/DF
Contato:

Mensagem por Glauco Cruz Costa »

Dudu_XBase escreveu:bom dia.
Vc usa blinker ?
Lnk é um arquivo de linkedição usado por ele.
NÃO. EU USO O COMPILADOR DO CLIPPER: CLIPPER + RTLINK.
Dudu_XBase
Membro Master
Membro Master
Mensagens: 1071
Registrado em: 25 Ago 2003 16:55

Mensagem por Dudu_XBase »

Use o blinker.
Faça pesquisas no fórum.


________________________________________________________________________________________________________
(Aow Saudade) Clipper 5.2e, Blinker 7, RDD SIXNSX, DBFCDX /Xharbour 1.0, Rdd Mediator (Mysql) Free , RDD Sqlrdd (Sql Server) Comercial
(Hoje) C# Python Sql Server e Oracle




clauber
Usuário Nível 3
Usuário Nível 3
Mensagens: 263
Registrado em: 22 Jul 2004 21:17
Localização: ceara

Mensagem por clauber »

entre me contato com meu e-mail que mandarei os arquivos necessarios ! !!

clauberromao@oi.com.br
clauberromao@yahoo.com.br
""
Glauco Cruz Costa
Usuário Nível 3
Usuário Nível 3
Mensagens: 102
Registrado em: 15 Dez 2005 22:02
Localização: Brasília/DF
Contato:

Re: Erro "Processor Stack Fault"

Mensagem por Glauco Cruz Costa »

Obrigado a todos pelas respostas. Mas, gostaria de tentar resolver isso na própria programação.
O que está acontecendo é o seguinte:
Uma PROCEDURE possui uma SET KEY para se pressionar uma tecla f5 e se chamar outra procedure. Dentro dessa outra procedure, há um chamamento de uma função. E, após esse chamamento, há um chamamento para a procedure inicial.
Aí, após umas cinco vezes apertando f5, vem o tal erroUNRECOVERABLE ERROR 650: PROCESSOR STACK FAULT.
Já tentei modificar de várias maneiras o meu programa, mas não consegui. Gostaria de saber alguém pode dar-me uma outra solução.
Dudu_XBase
Membro Master
Membro Master
Mensagens: 1071
Registrado em: 25 Ago 2003 16:55

Mensagem por Dudu_XBase »

Já sofri com esse erro há 10 anos atrás. A única solução que me ajudou na época foi o blinker compilando a app em modo extendido.
Na época cansei de martelar a cabeça procurando falha no código e /ou tentando usar outros artificios.
Qdo tive esse problema distribui as funções em outros prgs pois tenho prgs com mais de 13 mil linhas, levei quase um mês apanhando...

Tem essa possível solução tente adicionar no Rtlink o parametro:

/STACK:15000

RTLINK FI PROGRAMA /STACK:15000

Vc pode tentar ajustar esse valor o máximo é 65000.
Poste o bat ou o forma que vc usa para linkar sua app...


________________________________________________________________________________________________________
(Aow Saudade) Clipper 5.2e, Blinker 7, RDD SIXNSX, DBFCDX /Xharbour 1.0, Rdd Mediator (Mysql) Free , RDD Sqlrdd (Sql Server) Comercial
(Hoje) C# Python Sql Server e Oracle




Glauco Cruz Costa
Usuário Nível 3
Usuário Nível 3
Mensagens: 102
Registrado em: 15 Dez 2005 22:02
Localização: Brasília/DF
Contato:

Mensagem por Glauco Cruz Costa »

Não resolveu o problema, mas retardou bastante o aparecimento do erro. De qualquer forma, fico esperando alguém que possa ter uma solução definitiva. Obrigado. ;)
Avatar do usuário
Augusto
Usuário Nível 3
Usuário Nível 3
Mensagens: 473
Registrado em: 26 Ago 2003 17:50
Localização: Maricá/RJ
Contato:

Mensagem por Augusto »

Parceiro...
Vc pede ajuda, recebe mais não aceita...
Escute quem entende... quem tem mais experiência e estrada que vc... Afinal... não é esse o seu objetivo aqui no fórum ??
Deixe o RTLINK de lado... Use o CLIPPER 5.3 / BLINKER 6 ou 7... e seu problema estará resolvido...
Vai por mim...
:xau Fui...
goulart@provsul.com.br

Faça da PROVSUL o seu Provedor de Serviços WEB
Visite: www.PROVSUL.com.br
Josmar dos Santos
Usuário Nível 3
Usuário Nível 3
Mensagens: 277
Registrado em: 11 Jan 2006 18:36
Localização: Botucatu-SP

blinker

Mensagem por Josmar dos Santos »

Ola Clauco..siga as dicas dos colegas, eu particularmente usava o rtlink...mas os amigos daqui me ensinaram a usar o blinker e te garanto que vc não irá se arrepender..um abraço!
Josmar
:))
Eliane
Usuário Nível 2
Usuário Nível 2
Mensagens: 82
Registrado em: 22 Mai 2006 10:17
Localização: Londrina-PR

Mensagem por Eliane »

Usava o BLINKER 4-1 e menu sistema em clipper 52e, com o debug (CLD.LIB). Muitas vezes quando estava depurando o programa e usava a tecla F6 para ver os arquivos do sistema, aparecia este erro. Há poucos dias passamos para o BLINKER 7. Por enquanto, o erro não apareceu. Mas não sei a versão era o problema.
salmen
Usuário Nível 1
Usuário Nível 1
Mensagens: 5
Registrado em: 14 Ago 2006 17:39

Mensagem por salmen »

Ola Glauco..

Sugiro 2 solucoes:

1) Toda funcao chamada por uma set key, deve desativar todas set key na entrada inclusive a que a chamou...

Func Digitacao()

AbreSetKeys()
...
.... Em Algum ponto pressiona-se uma das teclas funcoes.
...
FechaSetKeys()

return nil

Function AbreSetKeys()
Set key -1 to inclui()
Set key -2 to exclui()
Return nil

Function FechaSetKeys()
Set key -1 to
Set key -2 to
return nil

Function inclui()
FechaSetKeys() // isto evita que a pilha de modulo chamados estoure
o faz ocasionar o erro. Imagina o usuario teclando F2+F3+F2+F3 seguidamente....

... comandos
... comandos
... + comandos
if preciso sair aqui
AbreSetKeys()
return nil
end

... comandos
... comandos
... + comandos

AbreSetKeys()
Return nil

Function exclui()
FechaSetKeys() // idem

... comandos
... comandos
... + comandos
if preciso sair aqui
AbreSetKeys()
return nil
end

... comandos
... comandos
... + comandos

AbreSetKeys()
Return nil

2) Ou ser for uma chamada simples:

Func Pessoas()

set key -2 consulta_nome()

...
.... Em Algum ponto pressiona-se a tecla funcao.
...

Set key -2 to
return nil

Function consulta_nome()

if procname(1) == "CONSULTA_NOME"
return nil
end

... comandos
... comandos
... + comandos

Return nil

Ou seja, se o controle programa ja estiver dentro da funcao consulta_nome e dentro da funcao for teclado a tecla set key correspondente ao -2 esta estara registrado no procname(1) entao retornara.
o perigo deste metodo é que se dentro desta funcao consulta_name()
tiver uma outra set key e o usuario ativar e dentro da nova funcao
ativada ele ativar o tecla funcao CONSULTA_NOME esta nao tera no
procname(1) o nome "CONSULTA_NOME" o que podera causar o erro se novamente for pressionado repetidas vezes a teclas de chamadas das funcoes mas, mesmo assim ha uma solucao nao muito pratica

Function consulta_nome()
ii = 1
// quando for empty()=.t. é porque a pilha acabou
while !empty(procname(ii))
if procname(ii) == "CONSULTA_NOME"
return nil
end
end

... comandos
... comandos
... + comandos

Return nil

portanto, com estes 2 exemplos... Processor Stack Fault ... por chamada de funcao já era....
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Em poucas palavras

Mensagem por Pablo César »

Caro colega Glauco,

Eu ja tive esse problema também e ainda uso o RTLINK, mas não descarto em usar o BLINKER (mas ora seja por outros motivos).
Acho que assim como o nosso colega "salmen" tentou dizer. Este problema se deve a que você faz uma declarção do SET KEY do F5 para chamar uma função. Mas resulta que você tenta chamar varias vezes e é quando dá pau. Mas eu te diria que desative o SET KEY -4 TO dentro dessa função (a qual foi chamada), pois daí dentro dela não será chamada novamente. Acho que é esse o erro ao final das contas.

Tente e nos diga se funcionou.

:xau
Responder