Software > Coding

Mit Pure C ja, mit AHCC nein.

(1/8) > >>

laufkopf:
Sorry für den dämlichen Betreff. Mir ist nichts weiter eingefallen.

Aufgrund von ataristar Anliegen Betreff seines Acc, hatte ich auch mal angefangen etwas in C zu schreiben. Unter Pure C funktioniert übersetzen und ausführen tadellos. Mit AHCC wird auch übersetzt, aber das Programm stürzt ab und ich habe keinen Plan warum  ???


--- Code: ---#include <stdint.h>
#include <aes.h>
#include <tos.h>
#include <stdio.h>
#include <float.h>

DISKINFO *phdfree;

void main (void){
char acc_name[] = "  HD Info...";
int16_t ap_id, menu_id;
int16_t msg_buf[8];

int16_t ret, i;

int32_t laufwerke, lw[32];
char alw = 'A';
double gesamt[32], frei[32];

ap_id = appl_init();

if (ap_id >= 0)
{
menu_id = menu_register(ap_id, acc_name);

if (menu_id >= 0)
{
for (;;)
{
evnt_mesag (msg_buf);
switch (msg_buf[0])
{
case AC_OPEN:
if (msg_buf[4] == menu_id)
{
if (Pdomain(-1) == 1)
{
printf("\nWir laufen in einer MiNT-Domain.");
}
else
{
printf("\nWir laufen in einer TOS-Domain.");
}
laufwerke = Drvmap();
printf("\nLaufwerke laut Drvmap(): ");
for(i=0;i<32;i++)
{
lw[i]=((laufwerke>>i)&1);
printf("%ld",lw[i]);
}
printf("\nDetails..\n");
for(i=2;i<32;i++)
{
if(lw[i] == 1)
{
ret = Dfree(phdfree, i+1);
if (ret == 0)
{
printf("\nLW %c  Anz freie Cluster : %ld\n",alw+i,(*phdfree).b_free);
printf("Geamtzahl Cluster : %ld\n",(*phdfree).b_total);
printf("Bytes pro Sektor  : %ld\n",(*phdfree).b_secsiz);
printf("Sektoren / Cluster: %ld\n",(*phdfree).b_clsiz);
gesamt[i] = (double) (((((double)(*phdfree).b_clsiz * (double)(*phdfree).b_secsiz) * (double)(*phdfree).b_total) / (double)1024) / (double)1024);
frei[i] = (double) (((((double)(*phdfree).b_clsiz * (double)(*phdfree).b_secsiz) * (double)(*phdfree).b_free) / (double)1024) / (double)1024);
printf("Gesamt Speicher in MB: %.2lf\n", gesamt[i]);
printf("Freier Speicher in MB: %.2lf", frei[i]);
/*form_alert( 1, "[1][Accessorie][ OK ]");*/
}
}
}
}
break;
case AC_CLOSE:
if (msg_buf[3] == menu_id)
{

}
break;
}
}
}
}
for(;;) evnt_mesag (msg_buf);
}
--- Ende Code ---

Vielleicht habt ihr ja nen Rat ?

mfro:

--- Zitat von: laufkopf am Fr 05.06.2015, 18:06:32 ---Vielleicht habt ihr ja nen Rat ?

--- Ende Zitat ---

Nur mal so ins Blaue: AHCC kann keine floats und doubles. Jedenfalls dann nicht, wenn keine FPU im Rechner steckt.

HelmutK:
Ohne debugger würde ich printfs einbauen, um rauszubekommen wo es passiert. Mit dem pure-debugger kann man sich ansonsten auch anhand der Crash-Adresse die Codestelle anzeigen lassen ("View source", dann crash-PC+(akt.-text-start-crash-text-start)). Der text ist im PD in _base.

Erstmal würde ich auf stack-Überlauf tippen, aber mit AHCC kenn ich mich überhaupt nicht aus.

-Helmut

laufkopf:
Die Ausgabe läuft definitiv bis zu dieser passage

gesamt = (double) (((((double)(*phdfree).b_clsiz * (double)(*phdfree).b_secsiz) * (double)(*phdfree).b_total) / (double)1024) / (double)1024);
frei = (double) (((((double)(*phdfree).b_clsiz * (double)(*phdfree).b_secsiz) * (double)(*phdfree).b_free) / (double)1024) / (double)1024);

Im Anhang n Shot vom build

KarlMüller:

--- Zitat von: laufkopf am Fr 05.06.2015, 22:35:57 ---Im Anhang n Shot vom build

--- Ende Zitat ---
Nach den Ausgaben zu urteilen nutzt Du die ST Version. Wie Markus schon schrieb Du benötigst einen 68020 und 68881/2 oder höher.

Navigation

[0] Themen-Index

[#] Nächste Seite

Zur normalen Ansicht wechseln