主题 : arm 板 驱动微型打印机 setlocale无法执行 wcstombs为执行 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 56215
精华: 0
发帖: 33
金钱: 170 两
威望: 34 点
综合积分: 66 分
注册时间: 2011-10-01
最后登录: 2015-11-22
楼主  发表于: 2012-03-31 17:25

 arm 板 驱动微型打印机 setlocale无法执行 wcstombs为执行

亲爱的诸位大神,我最近要利用arm板(tiny 210)做一个驱动小打印机,来打印一些简答的信息的项目,在打印的过程中,自己编写了一个简单的程序,这个程序打印英文等信息是没有错误的。
但是我要用来打印中文信息的时候,问题来了,我在pc机上编译,连接串口,打印机可以打印出中文信息,但是交叉编译,下到arm板上,运行的时候,却出问题了,是乱码,通过对源程序分析,发现问题出在如下几个地方,首先是setLocale(),这里,因为我google了一下,此处设定本机编码格式信息,我在pc机上运行的时候,用命令locale _a可以查看到一些支持的编码,但是在arm板上,确是没有这个命令,然后在arm板子上运行到wcstombs()函数的时候,却是无论如何没有反应,即该函数在arm板上没有执行,而该函数是用来宽字节和多字节进行转换的,这里没执行,那么明显得不到结果。

问题找到了,但是却该怎么解决呢,google,一下,度娘一下,主要是locale这个地方,嵌入式linux上缺少很多东西,所以该函数不能执行。那么我该怎么办呢,那位大神教教我,我连那个iconv也用过一下,也没用。
那么我要让arm板能实现locale和wcstombs该怎么办呢。
求解,万能的大神门,救救我吧。

PS:附上我的一些代码。


void miniPrintWriteUnicode(int fd,WCHAR data)
{


    DWORD dwWrote = 0;
    UCHAR szPrint[128] = {0};
       setlocale(LC_ALL,"zh_CN.GB2312");// 在arm下此处又问题,在pc上却可以执行
    char szTmp[128] = {0};
    if(-1 == fd)printf("error!\n");

    /* 进入中文打印模式 */
    memset(szPrint, 0, sizeof(szPrint));
    szPrint[0] = 0x1c;
    szPrint[1] = 0x26;
    //WriteFile(hPort, szPrint, 2, &dwWrote, NULL);
        write(fd,szPrint,2);    

    /* 点阵 8x8 */
    memset(szPrint, 0, sizeof(szPrint));
    szPrint[0] = 0x1b;
    szPrint[1] = 0x38;
    szPrint[2] = 0x3;
    //WriteFile(hPort, szPrint, 3, &dwWrote, NULL);
        write(fd,szPrint,3);
    
    memset(szPrint, 0, sizeof(szPrint));
    memset(szTmp, 0, sizeof(szTmp));

//下面的是主要的代码,上面的是一些特定命令

              
    
         wcstombs(szTmp,pwchello,sizeof(szTmp));//just the same of WideCharToMultiByte  //进行wcs到mbs的转换变换成多字节  / 在arm下此处又问题,在pc上却可以执行
      sprintf(szPrint, "%s", szTmp);   //讲sztmp的信息按格式付给szprint
       //WriteFile(hPort, szPrint, strlen(szPrint), &dwWrote, NULL);
    
         write(fd,szPrint,sizeof(szPrint)); //像串口发送数据
    

//以下也是命令,不用考虑
    memset(szPrint, 0, sizeof(szPrint));
    szPrint[0] = 0x1c;
    szPrint[1] = 0x2e;
    //WriteFile(hPort, szPrint, 2, &dwWrote, NULL);
        write(fd,szPrint,2);

    //return TRUE;
}
//ABOVE is write unicode


无所不能的大神,来解救我把!
问题主旨:如何在arm环境下让以上两个函数跑起来setlocale(),和wcstombs(),要不要交叉编译什么东西到板子上,还是要一些其他的东西!

解救!!!!!!!!!!!!!