Das Deutsche Casio-Taschenrechner Forum wurde zum 31.12.2013 geschlossen und kann weiterhin als Nachschlagewerk verwendet werden.
Wer mehr erfahren möchte: Ein sehr guter Beitrag von Elias

Probleme mit der RTC

Hilfe beim Programmieren mit dem fx-9860G SDK.

Re: Probleme mit der RTC

Beitragvon SimonLothar » Di 20. Nov 2012, 18:09

Syscall 11E2 ist ein Prizm-syscall. Nimm

SYSCALL 11E2 _RTC_GetDateTime

mal raus. Das geht nicht auf einem fx-9860.

In addin_main() muss Du noch die variable "time" deklarieren:

unsigned char time[8];

Die Aufrufe von RTC_SetDateTime und RTC_GetDateTime müssen so aussehen
RTC_SetDateTime( (unsigned char*)time );
RTC_GetDateTime( (unsigned char*)time );

arrays werden automatisch als Zeiger übergeben.

"&time" übersetzt der Compiler Zeiger auf Zeiger, das geht in diesem Fall schief.

Es wäre besser, den C++-Compiler zu nutzen. Der hat mehr Warnhinweise.
SimonLothar
 
Beiträge: 228
Registriert: Mi 27. Mai 2009, 10:51
Taschenrechner: fx-9860G, fx-9860G slim, fx-9860G SD, fx-9860GII SD, fx-9750GII, fx-7400GII, fx-CG20, fx-9860GII-2 SD, fx-9750GII-2, fx-7400GII-2, fx-CP330+, fx-CP400

Re: Probleme mit der RTC

Beitragvon Canta » Mi 21. Nov 2012, 17:06

ok, ich hab das jetzt so gemacht. Die Datei auch unter .cpp gespeichert.
Code: Alles auswählen
#include "fxlib.h"
#include "stdio.h"
#include "stdlib.h"

struct TRTC {
              unsigned char     R128CNT;
              unsigned char     gap1;
              unsigned char     RSECCNT;
              unsigned char     gap2;
              unsigned char     RMINCNT;
              unsigned char     gap3;
              unsigned char     RHOURCNT;
              unsigned char     gap4;
              unsigned char     RWEEKCNT;
              unsigned char     gap5;
              unsigned char     RDAYCNT;
              unsigned char     gap6;
              unsigned char     RMONCNT;
              unsigned char     gap7;
              unsigned short    RYEARCNT;
};

void RTC_GetDateTime( unsigned char time[8] ){
volatile struct TRTC*pRTC;

   pRTC = (TRTC*)0xFFFFFEC0;
   
   time[0] = (*pRTC).RYEARCNT >> 8;
   time[1] = (*pRTC).RYEARCNT & 0x00FF;
   time[2] = (*pRTC).RMONCNT;
   time[3] = (*pRTC).RDAYCNT;
   time[4] = (*pRTC).RHOURCNT;
   time[5] = (*pRTC).RMINCNT;
   time[6] = (*pRTC).RSECCNT;
   time[7] = 0;
}

int AddIn_main(int isAppli, unsigned short OptionNum)
{
unsigned char time[8];
unsigned int key;



Bdisp_AllClr_DDVRAM();

time[0] =  (0x20);
time[1] =  (0x12);
time[2] = (0x11);
time [3] = (0x07);
time[4] = (0x01);
time[5] = (0x01);
time[6] = (0x01);
time[7] = (0x01);
RTC_SetDateTime( (unsigned char*)time );

Sleep(600);
RTC_GetDateTime( (unsigned char*)time );


    while(1){
        GetKey(&key);
                 }

    return 1;
}

#pragma section _BR_Size
unsigned long BR_Size;
#pragma section
#pragma section _TOP
int InitializeSystem(int isAppli, unsigned short OptionNum)
{
    return INIT_ADDIN_APPLICATION(isAppli, OptionNum);
}
#pragma section


Code: Alles auswählen
   .SECTION P,CODE,ALIGN=4

         .MACRO SYSCALL FUNO, SYSCALLNAME, TAIL=nop
   .export \SYSCALLNAME'
\SYSCALLNAME'
   mov.l #h'\FUNO, r0
   mov.l #H'80010070, r2
   jmp @r2
   \TAIL'
   .ENDM


   SYSCALL 003B,   _RTC_GetTicks
         SYSCALL 023E,   _RTC_SetDateTime


   .end

jetzt kommt aber die Fehlermeldung:
Code: Alles auswählen
date\date.cpp(55) : C5020 (E) Identifier "RTC_SetDateTime" is undefined


wenn ich den gleichen code in .c speichere, bekomme ich andere Meldungen:
Code: Alles auswählen
date\date.c(26) : C2225 (E) Undeclared name "TRTC"
date\date.c(26) : C2500 (E) Illegal token ")"
Canta
 
Beiträge: 15
Registriert: Mo 3. Sep 2012, 12:52
Taschenrechner: fx-9860 g2

Re: Probleme mit der RTC

Beitragvon SimonLothar » Do 22. Nov 2012, 09:18

Du musst noch das Interface

Code: Alles auswählen
void RTC_SetDateTime( unsigned char time[8] );


einfügen.
Z. B. unterhalb der #includes.

Normalerweise kommen die Interfaces in *.h- oder *.hpp-Dateien (hier z. B. fx9860_syscall.h). Die werden dann mit include zu Beginn eingebunden.

Wenn Du C++ verwendest, musst Du den kompletten Quelltext normalerweise in

Code: Alles auswählen
extern "C" {

}

einfassen.
SimonLothar
 
Beiträge: 228
Registriert: Mi 27. Mai 2009, 10:51
Taschenrechner: fx-9860G, fx-9860G slim, fx-9860G SD, fx-9860GII SD, fx-9750GII, fx-7400GII, fx-CG20, fx-9860GII-2 SD, fx-9750GII-2, fx-7400GII-2, fx-CP330+, fx-CP400

Re: Probleme mit der RTC

Beitragvon Canta » Do 22. Nov 2012, 17:16

ok, danke. Wie sähe eine korrekte Abfrage aus? Bei mir zählen z.B. die Sekunden immer auf 90 bevor die Minute erhöht wird.
Code: Alles auswählen
RTC_GetDateTime( (unsigned char*)time );
PrintMini(5,30,(unsigned char*)"Sekunde:",MINI_OVER);
sprintf(buffer,"%d",time[6]);
PrintMini(50,30,(unsigned char*)buffer,MINI_OVER);
GetKey(&key);
Canta
 
Beiträge: 15
Registriert: Mo 3. Sep 2012, 12:52
Taschenrechner: fx-9860 g2

Re: Probleme mit der RTC

Beitragvon SimonLothar » Do 22. Nov 2012, 18:05

Die Rückgabe ist BCD-codiert. Du musst die Hex-Nibbles auswerten. 0x60 ist in diesem Fall 60. Wenn Du das als einfache Zahl interpretierst, dann gibt das 96.
SimonLothar
 
Beiträge: 228
Registriert: Mi 27. Mai 2009, 10:51
Taschenrechner: fx-9860G, fx-9860G slim, fx-9860G SD, fx-9860GII SD, fx-9750GII, fx-7400GII, fx-CG20, fx-9860GII-2 SD, fx-9750GII-2, fx-7400GII-2, fx-CP330+, fx-CP400

Re: Probleme mit der RTC

Beitragvon Canta » Do 22. Nov 2012, 20:53

geht das mit
Code: Alles auswählen
sprintf(buffer,"%x",time[6]);
PrintMini(50,30,(unsigned char*)buffer,MINI_OVER);
?
Canta
 
Beiträge: 15
Registriert: Mo 3. Sep 2012, 12:52
Taschenrechner: fx-9860 g2

Re: Probleme mit der RTC

Beitragvon SimonLothar » Fr 23. Nov 2012, 06:58

Canta hat geschrieben:geht das mit
Code: Alles auswählen
sprintf(buffer,"%x",time[6]);
PrintMini(50,30,(unsigned char*)buffer,MINI_OVER);
?

Im Prinzip ja. Ich benutze die printf-Funktionen selbst nicht, aber im Handbuch steht, dass im Ergebnisstring "0x" vorangestellt wird. Das muss Du dann berücksichtigen. Außerdem kann man gleich auch die Ausgabebreite 2 in das Format einbauen. Müsste dann "%2x" lauten.
SimonLothar
 
Beiträge: 228
Registriert: Mi 27. Mai 2009, 10:51
Taschenrechner: fx-9860G, fx-9860G slim, fx-9860G SD, fx-9860GII SD, fx-9750GII, fx-7400GII, fx-CG20, fx-9860GII-2 SD, fx-9750GII-2, fx-7400GII-2, fx-CP330+, fx-CP400

Re: Probleme mit der RTC

Beitragvon Canta » Fr 23. Nov 2012, 13:33

Jetzt habe ich glaube alles was ich wollte und es funktioniert. Vielen Dank! :D
Canta
 
Beiträge: 15
Registriert: Mo 3. Sep 2012, 12:52
Taschenrechner: fx-9860 g2

Vorherige

Zurück zu fx-9860G SDK (Alle fx-9860G Modelle)

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast

cron