2016-08-24 4 views
0

Je travaille avec la carte YRDKRL78 G13. J'utilise IAR v.2.20 pour le compilateur et j'ai créé un projet C++ dessus. Et j'utilise un cadre. Quoi qu'il en soit, j'ai implémenté tous mes codes et fonctionne correctement, mais après 2 minutes IAR donne des informations comme "L'application est abandonnée" et "La sortie du programme est atteinte". Je confonds vraiment à ce sujet j'ai utilisé très grande pile comme 512 et est près de 1024 est de loin le 4096.La sortie du programme est atteinte dans IAR RL78 V2.20

Voici mon main.cpp

#include "System.h" 
extern "C" 

{ 
#include "r_cg_macrodriver.h" 
} 

#pragma location = "OPTBYTE" 
__root const uint8_t opbyte0 = 0x7EU; 
#pragma location = "OPTBYTE" 
__root const uint8_t opbyte1 = 0xFFU; 
#pragma location = "OPTBYTE" 
__root const uint8_t opbyte2 = 0xE8U; 
#pragma location = "OPTBYTE" 
__root const uint8_t opbyte3 = 0x85U; 

/* Set security ID */ 
#pragma location = "SECUID" 
__root const uint8_t secuid[10] = 
{0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U}; 

void main(void) 
{ 

System::SystemInstance().SYS_vInit(); 
System::SystemInstance().SYS_vStart(); 
System::SystemInstance().SYS_vRun(); 

while(1) 
{ 
; 
} 


} 

Et voici la sortie IAR. IAR Output Console

Si quelqu'un face comme ce problème ou si quelqu'un a obtenu une solution ou une idée pourrait vous s'il vous plaît partager avec moi

Merci pour l'aide :)

EDIT: @rjp Tout d'abord merci pour la réponse . J'utilise un cadre spécial sur mon tableau qui saute Quantum. ces 3 fonctions sont les fonctions d'appel de Framwork et SYS_vRUN appellent boucle sans fin est

int_t QF::run(void) { 
onStartup(); // startup callback 

// the combined event-loop and background-loop of the QV kernel 
for (;;) { 
    R_WDT_Restart(); 
    RepaintLCD(); 
    delay_ms(50); /* Leave some room for the system to respond */ 
    QF_INT_DISABLE(); 
    if (QV_readySet_.notEmpty()) { 
     uint_fast8_t p = QV_readySet_.findMax(); 
     QMActive *a = active_[p]; 
     QF_INT_ENABLE(); 

     // perform the run-to-completion (RTS) step... 
     // 1. retrieve the event from the AO's event queue, which by this 
     // time must be non-empty and The "Vanialla" kernel asserts it. 
     // 2. dispatch the event to the AO's state machine. 
     // 3. determine if event is garbage and collect it if so 
     // 
     QEvt const *e = a->get_(); 
     a->dispatch(e); 
     gc(e); 
    } 
    else { 
     // QV::onIdle() must be called with interrupts DISABLED because 
     // the determination of the idle condition (no events in the 
     // queues) can change at any time by an interrupt posting events 
     // to a queue. QV::onIdle() MUST enable interrupts internally, 
     // perhaps at the same time as putting the CPU into a power-saving 
     // mode. 
     QP::QV::onIdle(); 
    } 
} 
} 

Fin Je cherchai tout le code pour la fonction exit() il n'y a pas tout. Mais vous avez mentionné un autre problème à propos de l'affirmation. Ici, vous pouvez voir la macro d'assertion et la fonction d'assertion implémentée par custome.

#define Q_ASSERT_ID(id_, test_) ((test_) \ 
    ? (void)0 : Q_onAssert(&Q_this_module_[0], (int_t)(id_))) 

Fonction;

void Q_onAssert(char const Q_ROM * const file, int line) { 
// implement the error-handling policy for your application!!! 
QF_INT_DISABLE(); // disable all interrupts 

// cause the reset of the CPU... 
//WDTCTL = WDTPW | WDTHOLD; 
//__asm(" push &0xFFFE"); 
// return from function does the reset 
} 

EDIT2: processus de mémoire les plus dynamiques sont faites dans la classe LedFactory. En-tête

/* 
* LedFactory.h 
* 
* Created on: Aug 3, 2016 
*  Author: Dev 
*/ 

#ifndef APPLICATION_LED_LEDFACTORY_H_ 
#define APPLICATION_LED_LEDFACTORY_H_ 

#include "LedController.h" 
class LedFactory { 
public: 
    typedef enum{ 
    LED1, 
    LED2, 
    LED3, 
    LED4, 
    LED5, 
    LED6, 
}LedTypes; 
public: 
LedFactory(); 
virtual ~LedFactory(); 
LedController * FirstLedFactory(LedTypes ledtype); 
LedController * SecondLedFactory(LedTypes ledtype); 
LedController * ThirdLedFactory(LedTypes ledtype); 
LedController * FourthLedFactory(LedTypes ledtype); 
LedController * FifthLedFactory(LedTypes ledtype); 
LedController * SixthLedFactory(LedTypes ledtype); 
public: 
static LedFactory& instance(); 
}; 

#endif /* APPLICATION_LED_LEDFACTORY_H_ */ 

Fichier source. Dois-je supprimer cette classe pour augmenter le problème de mémoire d'allocation dynamique? Ou comment puis-je réparer ce cours?

+0

Votre programme semble se bloquer. Que font vos trois appels de 'main()'? Il y a probablement 'exit()' ou '' assert() '' '' '' '' '' '' '' '' ('' '' '' '' '' '' ('' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ' Il pourrait également s'agir d'une corruption de pile entraînant une fonction à renvoyer le mauvais emplacement et à quitter 'main()'. Il y a beaucoup de choses qui peuvent mal se passer. – rjp

+0

Tout d'abord merci pour la réponse. J'utilise un cadre spécial sur mon tableau qui saute Quantum. ces 3 fonctions appellent des fonctions de framwork et SYS_vRUN appelle une boucle sans fin –

+0

@rjp Je n'ai pas pu ajouter mon commentaire ici c'est pourquoi je poste une nouvelle réponse ci-dessous merci pour l'aide. –

Répondre

-1

Le problème a été résolu. La raison principale était les processus d'allocation de mémoire dynamique qui sont utilisés en usine.

+0

Cette réponse n'aide personne d'autre avec un problème similaire. Si vous ne fournissez pas plus d'informations, cette réponse est inutile pour les autres et il serait préférable de supprimer la question complète. –