colorjun

colorjun

0个粉丝

40

问答

0

专栏

1

资料

colorjun  发布于  2017-11-30 22:35:14
采纳率 0%
40个问答
1893

QT在嵌入式中用哪个函数存取初始化文本参数?

 
在Windows下用QT creator调用QFile写了文本参数文件读取,在PC上能跑通。移植到3531A上运行就报错“Segmentation fault”。QT号称跨平台,怎么到了板上linux就不行了呢,make编译过了的啊。
请问大虾在板上我该用哪个函数来实现掉电参数的存取?
我来回答
回答3个
时间排序
认可量排序

ngswfx

1个粉丝

55

问答

1

专栏

40

资料

ngswfx 2017-12-01 06:34:34
认可0
本帖最后由 ngswfx 于 2017-12-1 06:51 编辑

我该用哪个函数来实现掉电参数的存取?
///////////////////////这个说明你对你的板子flash层面或者系统还不是太了解,嵌入式里面,只要flash分区可写,或者硬盘分区可写,或者u盘可写,linux有一套自己的机制来保证fwrite的东西会保存到实体硬件内,通常我们应用层面无需干预这个过程,你要是实在不放心,可以立刻更新写入,使用sync命令,这也仅仅是写入了超级重要的参数,然后担心硬件当机或者突然掉点的保护措施,通常的设备重启,设备内部有这些动作,而且系统运行中也有相关周期动作,无需干预。
linux的这些动作,既可以保证flash不被写坏,也可以确保数据不丢失。因为如果没有这些机制,立刻频繁操作flash实体硬件的话,如果程序没控制好写入方法以及周期,一天的运行,flash就得报废。


你得非常明确知道你把文件写到哪里了,这个东西从windows挪过来,肯定要改目录结构的,2个完全不同,搞移植就是折腾这些兼容性的

段错误,一般都是内存非法访问,例如sprintf(str,"%s",i);就会报错,int i是整数,而%s是str

你写文件之前,肯定要检查文件句柄是否正常,如果windows正常,只能说明windows下那个目录以及文件肯定存在,但到了板子上,你要是弄得不对,报个错很正常
另外,你写文件,你需要知道板子上flash,哪个分区可以写,这个是烧板子文件分区类型决定的,例如jffs2就支持写,某些分区类型根本不支持写,例如squafs,当你在一个不支持写的分区上写了配置,然后再去读取,进行下面的动作,如果程序代码保护的不好,肯定会报错的

FILE *fp=fopen(strFileFullName,"w+b");
fread(strbuff,1,nReadSize,fp);
fclose(fp);
//////////////////上面代码就会报错,当strFileFullName根本不存在时
如果改为
FILE *fp=fopen(strFileFullName,"w+b");
if(fp>0){
fread(strbuff,1,nReadSize,fp);
fclose(fp);
}
就安全一些了。

QFile 我没用过,但原理都一样

MiSign

0个粉丝

8

问答

0

专栏

0

资料

MiSign 2017-12-01 11:09:02
认可0
[code]Reading Files Directly
The following example reads a text file line by line:
     QFile file("in.txt");
     if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
         return;

     while (!file.atEnd()) {
         QByteArray line = file.readLine();
         process_line(line);
     }
The QIODevice::Text flag passed to open() tells Qt to convert Windows-style line terminators ("\r\n") into C++-style terminators ("\n"). By default, QFile assumes binary, i.e. it doesn't perform any conversion on the bytes stored in the file.
Using Streams to Read Files
The next example uses QTextStream to read a text file line by line:
     QFile file("in.txt");
     if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
         return;

     QTextStream in(&file);
     while (!in.atEnd()) {
         QString line = in.readLine();
         process_line(line);
     }[/code]

colorjun

0个粉丝

40

问答

0

专栏

1

资料

colorjun 2017-12-01 15:08:44
认可0
谢谢各位大虾们!:D
或将文件直接拖到这里
悬赏:
E币
网盘
* 网盘链接:
* 提取码:
悬赏:
E币

Markdown 语法

  • 加粗**内容**
  • 斜体*内容*
  • 删除线~~内容~~
  • 引用> 引用内容
  • 代码`代码`
  • 代码块```编程语言↵代码```
  • 链接[链接标题](url)
  • 无序列表- 内容
  • 有序列表1. 内容
  • 缩进内容
  • 图片![alt](url)
+ 添加网盘链接/附件

Markdown 语法

  • 加粗**内容**
  • 斜体*内容*
  • 删除线~~内容~~
  • 引用> 引用内容
  • 代码`代码`
  • 代码块```编程语言↵代码```
  • 链接[链接标题](url)
  • 无序列表- 内容
  • 有序列表1. 内容
  • 缩进内容
  • 图片![alt](url)
相关问答
无更多相似问答 去提问
举报反馈

举报类型

  • 内容涉黄/赌/毒
  • 内容侵权/抄袭
  • 政治相关
  • 涉嫌广告
  • 侮辱谩骂
  • 其他

详细说明

易百纳技术社区