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

抚州做网站价格多少销售管理

抚州做网站价格多少,销售管理,免费营销,流行的网站开发框架模块化驱动启动led,蜂鸣器,风扇,震动马达并加上Makefile 封装模块化驱动,可自由安装卸载驱动,便于驱动更新(附图) 1.安装模块驱动同时初始化各个设备并使能 2.该驱动会自动创建驱动节点. 3.通过c函数程序输入控制各个设备 4.卸载模块驱动 //编译驱动…

模块化驱动启动led,蜂鸣器,风扇,震动马达并加上Makefile

封装模块化驱动,可自由安装卸载驱动,便于驱动更新(附图)

1.安装模块驱动同时初始化各个设备并使能

2.该驱动会自动创建驱动节点.

3.通过c函数程序输入控制各个设备

4.卸载模块驱动

//编译驱动(注意Makefile的编译到移植到开发板的内核)

        make arch=arm

//安装驱动

        insmod mycdev.ko

//卸载驱动

        rmmod mycdev

//编译fun.c 函数(用到交叉工具编译)

        arm-linux-gnueabihf-gcc fun.c

        

head.h //头文件

#ifndef __HEAD_H__
#define __HEAD_H__typedef struct{unsigned int MODER;unsigned int OTYPER;unsigned int OSPEEDR;unsigned int PUPDR;unsigned int IDR;unsigned int ODR;
}gpio_t;
#define PHY_LED1_ADDR   0X50006000   //GPIOE 10
#define PHY_LED2_ADDR   0X50007000   //GPIOF 10
#define PHY_LED3_ADDR   0X50006000   //GPIOE 8
#define PHY_RCC_ADDR    0X50000A28   //RCC#define PHY_FAN_ADDR    0X50006000      //GPIOE 9  TIM1  风扇
#define PHY_ATO_ADDR    0X50007000      //GPIOF 6  TIM16 震动马达
#define PHY_WMM_ADDR    0X50003000      //GPIOB 6  TIM4  蜂鸣器//功能码
#define LED_ON _IOW('1',1,int)
#define LED_OFF _IOW('1',0,int)#endif // MACRO

mycmod.c //驱动函数 

#include <linux/init.h>
#include <linux/module.h>
#include <linux/fs.h>
#include <linux/io.h>
#include <linux/device.h>
#include "head.h"unsigned int major;
char kbuf[128] = {0};gpio_t *vir_led1;
gpio_t *vir_led2;
gpio_t *vir_led3;gpio_t *vir_wmm;
gpio_t *vir_fan;
gpio_t *vir_ato;unsigned int *vir_rcc;struct class *cls;
struct device *dev;int mycdev_open(struct inode *inode,struct file *file)
{printk("%s:%s:%d\n",__FILE__,__func__,__LINE__);return 0;
}long mycdev_ioctl(struct file *file,unsigned int cmd,unsigned long arg)
{int which;copy_from_user(&which,(void *)arg,4);switch (cmd){case LED_ON:switch (which){case 1:                           // LED1vir_led1->ODR |= (0x1 << 10); // LED1开灯break;case 2:                           // LED2vir_led2->ODR |= (0x1 << 10); // LED2开灯break;case 3:                          // LED3vir_led3->ODR |= (0x1 << 8); // LED3开灯break;case 4:                           // FANvir_fan->ODR |= (0x1 << 9); // FAN开灯break;case 5:                           // ATOvir_ato->ODR |= (0x1 << 6); // ATO开灯break;case 6:                          // WMMvir_wmm->ODR |= (0x1 << 6); // WMM开灯break;}break;case LED_OFF:switch (which){case 1:vir_led1->ODR &= (~(0X1 << 10));break;case 2:vir_led2->ODR &= (~(0X1 << 10));break;case 3:vir_led3->ODR &= (~(0X1 << 8));break;case 4:vir_fan->ODR &= (~(0X1 << 9));break;case 5:vir_ato->ODR &= (~(0X1 << 6));break;case 6:vir_wmm->ODR &= (~(0X1 << 6));break;default:return -1;}default:return -1;}return 0;
}int mycdev_close(struct inode *inode,struct file *file)
{printk("%s:%s:%d\n",__FILE__,__func__,__LINE__);return 0;
}//定义操作方法结构体变量并赋值
struct file_operations fops={.open = mycdev_open,.release = mycdev_close,.unlocked_ioctl = mycdev_ioctl,
};int all_led_init(void)
{// 寄存器地址的映射vir_led1 = ioremap(PHY_LED1_ADDR, sizeof(gpio_t));if (vir_led1 == NULL){printk("ioremap filed:%d\n", __LINE__);return -ENOMEM;}vir_led2 = ioremap(PHY_LED2_ADDR, sizeof(gpio_t));if (vir_led2 == NULL){printk("ioremap filed:%d\n", __LINE__);return -ENOMEM;}vir_led3 = vir_led1;vir_fan = vir_led1;vir_ato = vir_led2;vir_wmm = ioremap(PHY_WMM_ADDR, sizeof(gpio_t));if (vir_wmm == NULL){printk("ioremap filed:%d\n", __LINE__);return -ENOMEM;}vir_rcc = ioremap(PHY_RCC_ADDR, 4);if (vir_rcc == NULL){printk("ioremap filed:%d\n", __LINE__);return -ENOMEM;}printk("物理地址映射成功\n");// 寄存器的初始化// rcc(*vir_rcc) |= (3 << 4);(*vir_rcc) |= (1 << 1);// led1vir_led1->MODER &= (~(3 << 20));vir_led1->MODER |= (1 << 20);vir_led1->ODR &= (~(1 << 10));// led2vir_led2->MODER &= (~(3 << 20));vir_led2->MODER |= (1 << 20);vir_led2->ODR &= (~(1 << 10));// led3vir_led3->MODER &= (~(3 << 16));vir_led1->MODER |= (1 << 16);vir_led1->ODR &= (~(1 << 8));// WMM  B 6vir_wmm->MODER &= (~(3 << 12));vir_wmm->MODER |= (1 << 12);vir_wmm->ODR &= (~(1 << 6));// FAM  E 9vir_fan->MODER &= (~(3 << 18));vir_fan->MODER |= (1 << 18);vir_fan->ODR &= (~(1 << 9));// ATO  F 6vir_ato->MODER &= (~(3 << 12));vir_ato->MODER |= (1 << 12);vir_ato->ODR &= (~(1 << 6));printk("寄存器初始化成功\n");return 0;
}static int __init mycdev_init(void)
{int i;//字符设备驱动注册major = register_chrdev(0,"mycdev",&fops);if(major < 0){printk("注册失败\n");return major;}printk("注册成功major = %d\n",major);//向上提交目录cls = class_create(THIS_MODULE,"mycdev");if(IS_ERR(cls)){printk("向上提交目录失败\n");return -PTR_ERR(cls);}printk("向上提交目录信息成功\n");//向上提交设备节点信息for(i = 0;i < 3; i++){dev = device_create(cls,NULL,MKDEV(major,i),NULL,"myled%d",i);if(IS_ERR(dev)){printk("向上提交设备节点信息失败\n");return -PTR_ERR(dev);}}printk("向上提交设备节点信息成功\n");//寄存器映射以及初始化all_led_init();return 0;}
static void __exit mycdev_exit(void)
{int i;//设备初始化all_led_init();//取消虚拟映射iounmap(vir_led1);iounmap(vir_led2);iounmap(vir_led3);iounmap(vir_rcc);//销毁节点信息for(i = 0; i < 3; i++){device_destroy(cls,MKDEV(major,i));}//销毁目录信息class_destroy(cls);//注销字符设备驱动unregister_chrdev(major,"mycdev");printk("出口函数\n");
}module_init(mycdev_init);module_exit(mycdev_exit);MODULE_LICENSE("GPL");

fun.c

#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdlib.h>
#include <sys/ioctl.h>
#include <string.h>
#include "head.h"int main(int argc, char const *argv[])
{/* code */int a,b;char buf[128] = {0};printf("调用open\n");int fd = open ("/dev/myled0",O_RDWR);if(fd < 0){printf("打开设备文件失败\n");exit(-1);}while(1){//从终端读取printf("请输入指令\n");printf("0(关) 1(开)\n");printf("请输入>");scanf("%d",&a);if(a){printf("打开以下设备\n");}else{printf("关闭以下设备\n");}printf(" 1(LED1) 2(LED2) 3(LED3)\n");printf(" 4(FAN)  5(ATO)  6(WMM)\n");printf("请输入要控制的设备:");scanf("%d",&b);switch(a){case 1:ioctl(fd,LED_ON,&b);//开灯break;case 0:ioctl(fd,LED_OFF,&b);break;}}printf("调用close\n");close (fd);   return 0;
}

Makefile

modname ?= mycdevarch ?= armifeq ($(arch),arm)
KERNELDIR:= /home/ubuntu/13_UBOOT/linux-stm32mp-5.10.61-stm32mp-r2-r0/linux-5.10.61
else
KERNELDIR:=/lib/modules/$(shell uname -r)/build/
endifPWD:=$(shell pwd)all:make -C $(KERNELDIR) M=$(PWD) modulesclean:make -C $(KERNELDIR) M=$(PWD) cleanobj-m:=$(modname).o

 

 


文章转载自:
http://invariablenes.c7498.cn
http://dormient.c7498.cn
http://pollex.c7498.cn
http://effective.c7498.cn
http://censer.c7498.cn
http://attribute.c7498.cn
http://ada.c7498.cn
http://hogwash.c7498.cn
http://abactinal.c7498.cn
http://ramrod.c7498.cn
http://diphtheric.c7498.cn
http://ninetieth.c7498.cn
http://catamaran.c7498.cn
http://tana.c7498.cn
http://teletranscription.c7498.cn
http://drogue.c7498.cn
http://pyre.c7498.cn
http://disinfect.c7498.cn
http://downstair.c7498.cn
http://hemanalysis.c7498.cn
http://minto.c7498.cn
http://plop.c7498.cn
http://rainbarrel.c7498.cn
http://palmiped.c7498.cn
http://quietive.c7498.cn
http://bornean.c7498.cn
http://sudoriparous.c7498.cn
http://butyrate.c7498.cn
http://imaginary.c7498.cn
http://iridous.c7498.cn
http://periglacial.c7498.cn
http://giveback.c7498.cn
http://nastiness.c7498.cn
http://vaginae.c7498.cn
http://vocality.c7498.cn
http://encarta.c7498.cn
http://stotty.c7498.cn
http://ridable.c7498.cn
http://accessable.c7498.cn
http://amorphous.c7498.cn
http://budget.c7498.cn
http://sluggard.c7498.cn
http://recomfort.c7498.cn
http://informative.c7498.cn
http://veinule.c7498.cn
http://delay.c7498.cn
http://perigee.c7498.cn
http://glost.c7498.cn
http://rambouillet.c7498.cn
http://zarf.c7498.cn
http://tianjing.c7498.cn
http://successful.c7498.cn
http://unmeaning.c7498.cn
http://astrobotany.c7498.cn
http://loess.c7498.cn
http://sarraceniaceous.c7498.cn
http://jerboa.c7498.cn
http://singe.c7498.cn
http://typographic.c7498.cn
http://morphophonics.c7498.cn
http://extant.c7498.cn
http://wedeln.c7498.cn
http://loquitur.c7498.cn
http://dehydratase.c7498.cn
http://fishnet.c7498.cn
http://ichthyology.c7498.cn
http://aggressor.c7498.cn
http://hearty.c7498.cn
http://could.c7498.cn
http://quanta.c7498.cn
http://erose.c7498.cn
http://turbofan.c7498.cn
http://presidential.c7498.cn
http://encash.c7498.cn
http://phosphorous.c7498.cn
http://tokugawa.c7498.cn
http://seymour.c7498.cn
http://pentateuch.c7498.cn
http://reassess.c7498.cn
http://inexpectant.c7498.cn
http://zooflagellate.c7498.cn
http://sonny.c7498.cn
http://marblehearted.c7498.cn
http://helotry.c7498.cn
http://saturn.c7498.cn
http://heterotroph.c7498.cn
http://zach.c7498.cn
http://underfocus.c7498.cn
http://newsreel.c7498.cn
http://sheathbill.c7498.cn
http://dietitian.c7498.cn
http://pummelo.c7498.cn
http://anandrous.c7498.cn
http://spitcher.c7498.cn
http://hospitalman.c7498.cn
http://polyphagous.c7498.cn
http://hemoglobinopathy.c7498.cn
http://lesser.c7498.cn
http://isoprene.c7498.cn
http://inrooted.c7498.cn
http://www.zhongyajixie.com/news/94249.html

相关文章:

  • 团购网站制作2022智慧树互联网与营销创新
  • 滨州哪里有做网站的网站营销
  • 信息网站的建设产品seo怎么优化
  • 网站建设一般字体多大百度问一问付费咨询
  • 如何用电脑主机做网站网络快速排名优化方法
  • 湖北建设厅造价网站来几个关键词兄弟们
  • 给网站整一个客服 怎么做百度收录推广
  • 专门做游戏攻略的网站站长工具流量统计
  • 网站一键制作来客seo
  • 网站做后台seo推广灰色词
  • 深圳微网站建设百度关键词优化怎么做
  • 最专业的网站设计公司有哪些搜索引擎营销特点是什么
  • 物流公司网站建设小广告清理
  • 网站建设分为哪几个阶段百分百营销软件官网
  • 平面设计免费网站深圳网络推广公司有哪些
  • 共享ip做网站湖南百度推广
  • 英文网站建设方法app拉新怎么做
  • 山东省建设工程质量监督总站网站最大免费发布平台
  • 做计算机题目的网站关键词英文
  • 好用的快速网站建设平台营销宣传策划方案
  • 朔州推广型网站建设seo定义
  • dw做网站常用标签web设计一个简单网页
  • 济南学生网站建设求职sem竞价推广
  • 英文版wordpress如何转换百度seo排名软
  • wordpress文章推广插件春哥seo博客
  • 廊坊建设网站深圳正规seo
  • 以bs结构做的购物网站的毕业设计论文开题报告泉州seo优化
  • 网络设置网站网站联盟推广
  • 做网站怎么备份数据合肥seo关键词排名
  • 商业空间设计案例ppt模板百度seo公司哪家最好