当前位置: 首页 > wzjs >正文

求职网站建设中企动力经常加班吗

求职网站建设,中企动力经常加班吗,长沙seo排名优化公司,软件开发定制app----------原创不易,欢迎点赞收藏。广交嵌入式开发的朋友,讨论技术和产品------------- 在飞腾D2000平台上,安装了麒麟linux系统,我写了个GPIO点灯的程序,在应用层利用mmap函数将内核空间映射到用户态,然后…

----------原创不易,欢迎点赞收藏。广交嵌入式开发的朋友,讨论技术和产品-------------

在飞腾D2000平台上,安装了麒麟linux系统,我写了个GPIO点灯的程序,在应用层利用mmap函数将内核空间映射到用户态,然后直接操作GPIO方向和数据寄存器即可控制LED管脚的电压,实现闪灯功能。

核心代码如下,利用/dev/mem设备,内核将硬件地址空间映射到用户态空间

    if ((fd_mem = open("/dev/mem", O_RDWR, 0755)) < 0){printf("\r\n open /dev/mem err: %d-%s. \n", errno, strerror(errno));return 0;}mapped_gpio = (volatile unsigned char *)mmap(0, 0x1000, PROT_READ|PROT_WRITE, MAP_SHARED, fd_mem, GPIO1_BASE_ADDR);if (tmp == (void*)-1){	printf("mmap error : %d-%s. \n", errno, strerror(errno));close(fd_mem);return 1;}

然后交叉编译后,将目标二进制文件上传到单板上运行,闪灯正常。

于是乎把这源码和可执行文件发给客户使用,结果报错。打印如下信息,提示非法参数
在这里插入图片描述
我将mmap的几个参数都研究了一下:
1、应该不是权限问题,对方用的是root账户执行的;
2、查看了单板上内核空间,看是否有GPIO物理地址的定义
#define GPIO1_BASE_ADDR 0x28005000 //PHYTIUM D2000 GPIO
cat /proc/iomem 执行结果如下,有0x28005000的空间
在这里插入图片描述
3、PROT_READ|PROT_WRITE这两个参数应该没有问题;
4、想到重要的一个因素,mmap必须以页表大小对齐的起始地址,才能做映射。于是查看当前系统的页表大小,用如下命令:getconf PAGESIZE。
在这里插入图片描述
在麒麟系统查到结果是4KB的小页面,在centos下查询得到的是65536,64KB的页面。这个参数在内核编译的时候可以设定的。肯定是centos没有设定小页面模式。关于MMU和内存页的知识,本文不叙述。有兴趣的朋友自己去研究学习。

于是乎将代码修改了一下,考虑不管多大页面都能兼容

    int pagesize;u32 mmap_base;u32 mmap_offset;volatile unsigned char *tmp;pagesize = sysconf(_SC_PAGESIZE);if (pagesize == -1) {printf("Error, sysconf for _SC_PAGESIZE \n");return 1;} else {printf("Page size: %d bytes \n", pagesize);}mmap_base   = GPIO1_BASE_ADDR & ~(pagesize - 1);mmap_offset = GPIO1_BASE_ADDR & (pagesize - 1);printf("Hardware address = 0x%x,  mmap_base = 0x%x, mmap_offset = 0x%x \n", GPIO1_BASE_ADDR, mmap_base, mmap_offset);if ((fd_mem = open("/dev/mem", O_RDWR, 0755)) < 0){printf("\r\n open /dev/mem err: %d-%s. \n", errno, strerror(errno));return 0;}tmp = (volatile unsigned char *)mmap(0, pagesize, PROT_READ|PROT_WRITE, MAP_SHARED, fd_mem, mmap_base);if (tmp == (void*)-1){	printf("mmap error : %d-%s. \n", errno, strerror(errno));close(fd_mem);return 1;}mapped_gpio = (volatile unsigned int *)((unsigned long)tmp + mmap_offset);printf(" mapped_base = %p, mapped_gpio = %p \n", tmp, mapped_gpio);printf("GPIO_SWPORTA_DR  = 0x%x \n",    *mapped_gpio);    //GPIO_SWPORTA_DRprintf("GPIO_SWPORTA_DDR = 0x%x \n\n",  *(mapped_gpio+1)); //GPIO_SWPORTA_DDR

重新编译后在多个版本上验证可行。当初写这个功能程序,太匆忙,没有考虑太细致。不过也很快定位解决了。这也告诫搞研发的朋友,虽然同一套代码不修改,在不同环境上也不一定成功执行。陷阱无处不在,大家谨慎小写,写出健壮可靠的代码。


文章转载自:

http://zF66FnyT.nrqnj.cn
http://B4GqGHvy.nrqnj.cn
http://MT5akL5r.nrqnj.cn
http://eH4FxqnA.nrqnj.cn
http://CAs5xyrQ.nrqnj.cn
http://gJoCgz4l.nrqnj.cn
http://C4Deqvss.nrqnj.cn
http://prtFigpP.nrqnj.cn
http://ndecdhLu.nrqnj.cn
http://PGxoDG8i.nrqnj.cn
http://A6qS9uXW.nrqnj.cn
http://jhxcGk3w.nrqnj.cn
http://Qt0SezIR.nrqnj.cn
http://yPLiObwN.nrqnj.cn
http://apNfO50j.nrqnj.cn
http://E4Umzr84.nrqnj.cn
http://dgzE6oVi.nrqnj.cn
http://bcSk4s5P.nrqnj.cn
http://4yVMIQCm.nrqnj.cn
http://rIj8NrMP.nrqnj.cn
http://F8lzYkul.nrqnj.cn
http://MVdRmAld.nrqnj.cn
http://A5Rj8WEp.nrqnj.cn
http://CXbkBRjd.nrqnj.cn
http://sOCd44F2.nrqnj.cn
http://msrJ8dPb.nrqnj.cn
http://Ig8VzucI.nrqnj.cn
http://q9ejn8kP.nrqnj.cn
http://TOO4CJC1.nrqnj.cn
http://ZfGCvmfJ.nrqnj.cn
http://www.dtcms.com/wzjs/633394.html

相关文章:

  • 地方志网站建设方案wordpress评论回复
  • 郑州网站建设创业网站服务器做缓存
  • 法治建设网站作用dw做网站怎么发布
  • 个人网站备案电话访谈wordpress修改首页调用
  • 外 网站 公司小松建设官方网站
  • 搭建网站案例精粹票务网站建设
  • php网站后台登陆不了微站小程序
  • 南宁免费网站建站模板小程序链接wordpress
  • 做微商货源网站赚钱吗网站没流量
  • 网页游戏网站手机美工做网站尺寸多少钱
  • 如今做那个网站能致富网站建设费 科研 设备费
  • 做网站必须先买域名吗网络架构师工资一般多少
  • 做网站实现登陆功能网站关键词堆砌
  • 泰州建设局网站wordpress zip 升级
  • 网站备案有什么作用石家庄网站建站推广
  • 外网浏览网站大渝网官网
  • 网站开发工程师薪酬待遇外贸网站经典营销案例
  • 网站运营工作计划手机网站怎么做才适合优化
  • ps做图 游戏下载网站有哪些内容dw做的网站怎么让别人看到
  • 校园微网站建设方案ppt模板下载WordPress字库压缩
  • 六兄弟做网站南宁网站推广经理
  • 腾讯云网站建设流程怎么建立一个平台
  • php mysql开发的网站开发广东建设注册执业中心网站
  • 网站项目建设人员规划包装设计说明模板
  • 青岛建设英文网站建设网站怎么做吸引人
  • 清溪网站建设如何在手机上做自己的网站
  • 网站推广公司水果茶上海企业专属网页
  • 网站备案换公司吗嘉兴门户网站建设
  • 搞一个卖东西的网站怎么做阿里云域名注册官网登录
  • 杭州做网站推广公司推荐网站建设公司厦门