編集 - ここではいくつかのリソースは、コメントに反応している:ダイナミックC - エラーwriteUserBlockArrayを使用して()
costate:http://bamafolks.com/randy/students/embedded/dynamicC_mtask.html
writeUserBlockArray:http://ftp1.digi.com/support/documentation/html/DynCFunctionReference/12fun595.htm#1259708
私は取得していますエラーは `-1 :無効なアドレスまたは範囲 '。
#define MAX_SAMPLES 20
#define REPORT_AFTER 3
main()
{
int i;
int report;
int write_result;
int read_result;
struct temp_struct {
float celcius;
float fahrenheit;
} temperature_data;
struct temp_struct save_data[MAX_SAMPLES];
struct temp_struct read_data[MAX_SAMPLES];
unsigned int save_lens[MAX_SAMPLES];
float *pTempC, *pTempF;
pTempC = &temperature_data.celcius;
pTempF = &temperature_data.fahrenheit;
i = 0;
report = 0;
brdInit();
while(1)
{
costate
{
sampleTemp(&temperature_data.celcius, &temperature_data.fahrenheit);
save_data[i].celcius = *pTempC;
save_data[i].fahrenheit = *pTempF;
save_lens[i] = sizeof(temperature_data);
if(i==MAX_SAMPLES) i=0; else i++;
report=1; // Sample has been taken, a report can be produced
waitfor(DelaySec(SAMPLE_DELAY_SECS));
}
// If REPORT_AFTER set to 3, this executed every third sample taken.
// "report" the last set of data saved by printing out
if(report && i%REPORT_AFTER==0 && i!=0)
{
write_result = writeUserBlockArray(i-REPORT_AFTER, save_data, save_lens, REPORT_AFTER);
// Read data to check it was saved correctly
read_result = readUserBlockArray(read_data, save_lens, REPORT_AFTER, i-REPORT_AFTER);
// Print out all data saved here.
report = 0; // Do not report again until another sample has been taken.
break; // Stops after first report. Can be removed later
} // end if
} // end while
} // end main
float sampleTemp(float *tempC, float *tempF)
{
auto float Tk, //calculated temperature kelvins
Draw; //raw data value
auto int i;
printf("Getting temperature\n\n");
Draw = anaIn(7, SINGLE, GAIN_1);
//calculate temperature in kelvins
Tk = (Bt*Tkstd)/(Tkstd * (log(fabs((-Draw*Rs)/(Rtstd*(Draw-(Dmax*Gain)))))) + Bt);
*tempC = Tk - 273.15; //convert to celcius
*tempF = 1.8*(Tk - 255.37); //calculate fahrenheit
return 0;
}
これはすべて関連コードです。私は一貫して無効なアドレスまたは範囲を象徴するwriteUserBlockArray()
メソッドから返された-1
を返しています。
私はそれがダイナミック-Cであるという事実はあまり違いはなく、問題のある方法の概要は、これだとは思わない:
writeUserBlockArray(addrOffset, arraySources, arraySourceSizes, numSources);
私はCに新しいですし、私はと間違って何かをやっていると思います私は配列にデータを保存していますか?
ありがとうございます。
あなた 'MAX_SAMPLES'は何ですか?それはマクロですか?その定義は何ですか? –
'while(1)'ループの 'costate'とは何ですか? –
writeUserBlockArrayのコードを表示できますか? – Bort