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

淘宝放单网站怎么做的专业培训大全

淘宝放单网站怎么做的,专业培训大全,网站备案后缀限制,网页作品集----------原创不易,欢迎点赞收藏。广交嵌入式开发的朋友,讨论技术和产品------------- 在飞腾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://www.dtcms.com/wzjs/69738.html

相关文章:

  • 济南自适应网站建设百度竞价广告点击器
  • 分析某个网站建设营销技巧和营销方法培训
  • 手机租赁 网站开发西安seo托管
  • 网站开发就业培训班厦门网站建设公司
  • 做音乐网站没有版权如何推广店铺呢
  • 新浪云服务器做网站百度如何快速收录网站
  • 网站没有web.config磁力搜索引擎哪个好
  • 织梦 一键更新后网站空白深圳seo网络推广
  • net后缀的可以做网站吗群推广
  • 网站建设标题怎么写上海百度竞价
  • 市场监督管理局权力大不大seo推广宣传
  • 访问的网站显示建设中外链是什么意思
  • 哪里有做效果图的网站常见的搜索引擎有哪些?
  • 张家港网站建设培训学校营销策略ppt模板
  • 做感恩网站的图片素材自媒体怎么赚钱
  • 大学做机器人比赛的网站论坛曲靖seo建站
  • 武汉网站搭建百度官方推广
  • 郑州郑东新区网站建设网络宣传方案
  • 页面设计图标浙江seo
  • 网站建设一般需要多少费用一站式软文发布推广平台
  • 网站招聘方案怎么做企业广告宣传
  • 网页投放广告怎么收费seo长尾关键词
  • 建设部网站水利造价师企业网站设计服务
  • WordPress登录美化扁平化宁波seo服务推广
  • 哈尔滨网站建设那家好淘宝流量平台
  • 营销型网站开发流程包括关键词自动生成器
  • 免费域名证书申请搜狗seo快速排名公司
  • 有什么做设计的兼职网站数字营销课程
  • 备案网站大全网站运营推广
  • 做的公司网站怎么没了百度搜索排名推广