下面有2个示例:
1:保存机器从开机到结束的VBATT;
2:保存uart接收到的数据到文件;
意义不多说了。
以下是代码:
#include
#include
#include
static struct file *fp =NULL;
int write_to_file (char *buf, int size)
{
int ret = 0;
struct file *fp;
mm_segment_t old_fs;
loff_t pos = 0;
int nwrite = 0;
static int offset = 0;
static int first_flag=0;
/* change to KERNEL_DS address limit */
old_fs = get_fs();
set_fs(KERNEL_DS);
if( first_flag==0){
first_flag=1;
/* open file to write */
fp = filp_open("/data/at_log1", O_WRONLY|O_CREAT, 0640);
if (!fp) {
printk("%s: open file error\n", __FUNCTION__);
ret = -1;
goto exit;
}
}
pos=(unsigned long)offset;
/* Write buf to file */
nwrite=vfs_write(fp, buf, size, &pos);
offset +=nwrite;
exit:
return ret;
}
int xxxx_exit(void){
if (fp)
filp_close(fp, NULL);
}
1:保存VBATT与SOC:
static int adjust_soc(struct pm8921_bms_chip *chip, int soc,
int batt_temp, int chargecycles,
int rbatt, int fcc_uah, int uuc_uah, int cc_uah)
{
------------
static char vbatt[100];
rc = pm8921_bms_get_simultaneous_battery_voltage_and_current(
&ibat_ua,
&vbat_uv);
if (rc < 0) {
pr_err("simultaneous vbat ibat failed err = %d\n", rc);
goto out;
}
chip->vbat_mv= vbat_uv/1000;
sprintf(vbatt,"%d %d\n",the_chip->vbat_mv,calculated_soc);
write_to_file(vbatt,strlen(vbatt));
----------
}
2:将串口接收到的字符转化为16进制保存到文件中:
static void msm_serial_hs_rx_tlet(unsigned long tlet_ptr)
{
---------------
static char temp[1024];
rx_count = msm_hs_read(uport, UARTDM_RX_TOTAL_SNAP_ADDR);
/* order the read of rx.buffer */
rmb();
if (0 != (uport->read_status_mask & CREAD)) {
retval = tty_insert_flip_string(tty, msm_uport->rx.buffer,
rx_count);
if (retval != rx_count) {
msm_uport->rx.buffer_pending |= CHARS_NORMAL |
retval << 5 | (rx_count - retval) << 16;
}
if(rx_count<=512){
//memcpy(temp,msm_uport->rx.buffer,rx_count);
for(i=0;i
sprintf(temp+2*i,"%02x",msm_uport->rx.buffer[i]);
write_to_file(temp,strlen(temp));
}
}
----------------
}