6996|17

68

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

请问,如何将已知地址的内容保存到文本文件中,重谢!~ [复制链接]

已知:x = (s32)*(vs16 *)0x08000002
     y = (s32)*(vs16 *)0x08000004
     z = (s32)*(vs16 *)0x08000006
x,y,z内容时刻变化,如何将x,y,z的值保存到test.txt中。谢谢大家

最新回复

还是仔细调试一下写文件的操作,向文件写入字母数字之类,看是否成功。 如果文件写操作成功,那就改好那个错误,或许因为这个错误,写入文件的是无效的不可见字符。  详情 回复 发表于 2008-7-3 16:32
点赞 关注

回复
举报

96

帖子

0

TA的资源

一粒金砂(初级)

沙发
 

  1. FILE *fp = fopen("text.txt","w");
  2. fprintf(fp,"%x,%x,%x",x,y,z);
  3. fclose(fp);
复制代码
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
内容时刻变化?你希望是将时刻变化的值全放到文件中?还是在某个时刻才保存?

如果是希望某个时刻保存,就如1楼的,也就是正常的C对文件操作。

如果是希望将一个时间段,比如1s内的变化都保存下来,就要用另外的方法了。

确定变化的频率,确定希望的采样率(读一次值算采样一次)。

开一个buffer,大小这样计算:S = 3* (T/t); (T是时间段,比如1秒,t是采样周期,比如1ms。

开一个定时器,间隔是希望的采样周期t(比如1ms),每次读一下三个值,将三个值存到buffer中,然后buffer指针+3。

每到T时间(比如1秒),就将buffer内容存到文件test.txt中,将buffer清空(其实将buffer指针重新指向开始入口就行)。

然后进行下一次的T动作。
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

4
 
谢谢楼上提醒,我想将一个时间段的变化都记录下来,如就记录一秒内的变化情况,希望能贴出代码详解,谢谢!~
 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

5
 
2楼说的非常之详细了
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

6
 
lz要代码就给100分。

淫水兄弟都不容易啊,写那么多的自然语言的代码。
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

7
 
引用 5 楼 lenux 的回复:
lz要代码就给100分。

淫水兄弟都不容易啊,写那么多的自然语言的代码。


100分也不乐意写代码,因为他肯定会直接copy过去运行,然后再过来说出了什么什么错误。
倒不如他自己写了,出错,然后贴出来,我来改。

还有,lenux,啥时看我叫那啥水了?明明是淫雨的。你的思想很不纯洁,鉴定完毕。
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

8
 
#include
#include "ShakeMe.h"
#include "math.h"
#include

#include

//---------------------------------------------------------------------------------
void Vblank() {
//---------------------------------------------------------------------------------
//        frame++;
}

void WaitForKeyA()
{
        scanKeys();
        while(!(keysDown() & KEY_A))scanKeys();
}
//---------------------------------------------------------------------------------
int main(void)
{
        powerON(POWER_ALL_2D);
        irqInit();
        irqSet(IRQ_VBLANK, Vblank);
        irqEnable(IRQ_VBLANK);
        videoSetMode(0);        //not using the main screen
        videoSetModeSub(MODE_0_2D | DISPLAY_BG0_ACTIVE);        //sub bg 0 will be used to print text
        vramSetBankC(VRAM_C_SUB_BG);

        SUB_BG0_CR = BG_MAP_BASE(31);
       
        BG_PALETTE_SUB[255] = RGB15(0,31,0);        //by default font will be rendered with color 255
       
        //consoleInit() is a lot more flexible but this gets you up and running quick
        consoleInitDefault((u16*)SCREEN_BASE_BLOCK_SUB(31), (u16*)CHAR_BASE_BLOCK_SUB(0), 16);

        bool start = false;
        bool FastMode = false;

        int32 x,y,z;
        int32 scalex, scaley;
        int32 rotatex, rotatey;

        u32 r;

        SMPowerOn(SMHOST_ARM9);

        if(!SMInserted())
                iprintf("\x1b[0;0HShakeMe NOT detected!     \n");

        r = SMSetCtrlREG(SM_12BIT | SM_6G | SM_DR_640| SM_POWER_ON | SM_X_ENA |
                                        SM_Y_ENA | SM_Z_ENA);
        if(r != 0)
                iprintf("\x1b[1;0HSet CtrlREG error! %02D    \n", r);

        scanKeys();
        while(1)
        {
                swiWaitForVBlank();
                scanKeys();
                if(keysDown() & KEY_A)
                {
                        if(SMIsFastMode())
                                iprintf("\x1b[2;0HIn Fast Mode       \n");
                        else
                                iprintf("\x1b[2;0HIn Normal Mode     \n");
                }
                else if(keysDown() & KEY_B)
                {
                        SMEnterFastMode();
                        FastMode = true;
                }
                else if(keysDown() & KEY_X)
                {
                        SMLeaveFastMode();
                        FastMode = false;
                }
                else if(keysDown() & KEY_Y)
                {
                        iprintf("\x1b[1;0HREG1: %08X\n", SMGetCtrlREG());
                }
                else if(keysDown() & KEY_L)
                {
                        start = true;
                }
                else if(keysDown() & KEY_R)
                {
                        start = false;
                }

                if(start)
                {
                        if(FastMode)
                        {
                                x = (int32)*(vs16 *)0x08000002;
                                y = (int32)*(vs16 *)0x08000004;
                                z = (int32)*(vs16 *)0x08000006;
                                scalex = 0.03125 * divf32(x, sqrtf32(mulf32(x,x) + mulf32(z,z)));
                                scaley = 0.03125 * divf32(y, sqrtf32(mulf32(y,y) + mulf32(z,z)));
//                                rotatex = (x < 0)? scalex : 180 - scalex;
//                                rotatey = (y < 0)? scaley : 180 - scaley;
                                iprintf("\x1b[18;0HrotateX = %05D", (s32)scalex);
                                iprintf("\x1b[19;0HrotateY = %05D", (s32)scaley);
                               
                                iprintf("\x1b[20;0HState = %04X", *(vu16 *)0x08000000);
                                iprintf("\x1b[21;0HX = %05D", *(vs16 *)0x08000002);
                                iprintf("\x1b[22;0HY = %05D", *(vs16 *)0x08000004);
                                iprintf("\x1b[23;0HZ = %05D", *(vs16 *)0x08000006);

                         
        FILE* testWrite = fopen ("FATTest.txt", "wb"); //wb = create/truncate & write
        fwrite("*(vs16 *)0x08000002", 16, 1, testWrite);
        fwrite("*(vs16 *)0x08000004", 16, 1, testWrite);
        fwrite("*(vs16 *)0x08000006", 16, 1, testWrite);
        fclose(testWrite);




                               
                        }
                        else
                        {
                                iprintf("\x1b[20;0HState = %04X", SMReadREG(0x27));
                                iprintf("\x1b[21;0HX = %05D", (s16)(SMReadREG(0x28) | (SMReadREG(0x29)<<8)));
                                iprintf("\x1b[22;0HY = %05D", (s16)(SMReadREG(0x2A) | (SMReadREG(0x2B)<<8)));
                                iprintf("\x1b[23;0HZ = %05D", (s16)(SMReadREG(0x2C) | (SMReadREG(0x2D)<<8)));
                        }
                }
        }

        return 0;

黄色部分是将内容写入文本文件的,程序可以编译执行,但无法创建和写入文件,请高手分析!~
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

9
 
我的机器调成保护色了,不知道颜色显式正常不,
以上代码中
FILE* testWrite = fopen ("FATTest.txt", "wb"); //wb = create/truncate & write
fwrite("*(vs16 *)0x08000002", 16, 1, testWrite);
fwrite("*(vs16 *)0x08000004", 16, 1, testWrite);
fwrite("*(vs16 *)0x08000006", 16, 1, testWrite);
fclose(testWrite);
是后来加入的,估计问题出在这里,请大家分析,谢谢~
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

10
 
lz你的太长了吧。

FILE* testWrite = fopen ("FATTest.txt", "wb");
DWORD dwError = 0;
if(NULL == testWrite)
{
dwError = GetLastError();
}

看看你的文件创建了没有。
 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(中级)

11
 
还是不行,关键是无法将*(vs16 *)0x08000002 *(vs16 *)0x08000004 *(vs16 *)0x08000006内容保存到文本中
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

12
 
编译时出错,
提示:e:/hardware/APILib/APILib/source/main.cpp:151: undefined reference to `fatInitDe
fault'
collect2: ld returned 1 exit status
make[1]: *** [/e/hardware/APILib/APILib/APILib.elf] Error 1
make: *** [build] Error 2
会是什么原因呢?
 
 
 

回复

63

帖子

0

TA的资源

一粒金砂(初级)

13
 
刚才还可以编译,现在怎么不行了???
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

14
 
vs16是你自定义的类型?typedef 是什么?int?

fwrite("*(vs16 *)0x08000002", 16, 1, testWrite);
第一个参数是buffer的地址,你怎么加""呢?
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

15
 
引用 13 楼 shuiyan 的回复:
vs16是你自定义的类型?typedef 是什么?int?

fwrite("*(vs16 *)0x08000002", 16, 1, testWrite);
第一个参数是buffer的地址,你怎么加""呢?


这是他的一个错误,但是怎么说也是能写到文件的。

现在连写都写不进去。

我怀疑代码都没有执行到这里。

建议除去外部逻辑,先单测一下文件操作。
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

16
 
引用 13 楼 shuiyan 的回复:
vs16是你自定义的类型?typedef 是什么?int?

fwrite("*(vs16 *)0x08000002", 16, 1, testWrite);
第一个参数是buffer的地址,你怎么加""呢?

vs16是volatile signed short int
 
 
 

回复

59

帖子

0

TA的资源

一粒金砂(初级)

17
 
仔细调试下吧,极有可能没运行到文件创建那里就翘了.
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

18
 
还是仔细调试一下写文件的操作,向文件写入字母数字之类,看是否成功。

如果文件写操作成功,那就改好那个错误,或许因为这个错误,写入文件的是无效的不可见字符。
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表