㈠ excel 中三个条件,要出三个不同结果如何编程序
=IF(COUNTIF(F10:F16,"不合格")>0,"不合格",IF(COUNTIF(F5:F9,"一级")>0,"一级",IF(COUNTIF(F5:F9,"高级")=5,"高级")))
三楼的答案中if(countif(f10:f16,"一级")>0,"带错单元格了。
顺带一句,这只是编辑公式,不是程序!
㈡ 计算如下公式的A20值。 A1=1, A2=1/(1+A1), A3=1/(1+A2), A4=1/(1+A3), ......(按四舍五入保留10位小数)
0.6180339850
这个结果没错。
㈢ 四 . 树莓派A20 GPIO中断程序编写(1基本处理)
关于按键,在DVK521上为:
我又从一份数据手册中看到,PI7,PI8,PI9是没有外部中断功能的。如下图所示:
还好,目前的按键是通过短接帽来连接PI7 PI9的,那么可以将短接帽拿掉,使用杜邦线连接PI10 PI12。
现在我将Key2连接到PI10上。那么KEY2的中断引脚为EINT22。
配置sys_config.fex文件:
现在使用的树莓派A20,是一个双核A7的芯片,而这个属于SMP架构,中断处理方式也已经和原先的理念大有不同。所以还是要知道关于linux的中断原理,可以从网络中获取相关历史性技术知识。
从A20的数据手册中,可以看到外部中断数到了EINT31。也就是说PIO中断功能有32个。
下面列出的API函数是在 linux-sunxiarcharmplat-sunxiSys_config.c中。
1.gpio_request_ex(),获取sys_config.fex中设置的中断IO口。
2.gpio_set_one_pin_io_status(),设置为输入状态。
3.gpio_set_one_pin_pull(),设置输入引脚的上下拉状态。
4.request_irq()注册中断函数。
request_irq()函数:
第一个参数为SW_INT_IRQNO_PIO,表示是外部端口的中断号。
第二个参数为中断处理函数名。
第三个参数为中断方式,如IRQ_TYPE_EDGE_RISING,上升沿触发,而IRQ_TYPE_EDGE_FALLING则是下降沿触发,IRQF_SHARED为共享。
第四个参数为中断名。
第五个参数为中断传递的数据。
1.获取IO中断源信息
由于内核使用的是虚拟地址寻址硬件地址,获取中断源就需要将IO硬件地址空间映射到虚拟地址上。可以使用ioremap(PIO_BASE_ADDRESS, PIO_RANGE_SIZE)进行映射。
2.屏蔽中断源
a.读取中断源寄存器的状态,可以使用readl(映射的IO地址 + PIO_INT_STAT_OFFSET);
b.判断对应的中断,使用writel(reg_val&(1<<(CTP_IRQ_NO)),映射的IO地址 + PIO_INT_STAT_OFFSET);清除状态位。
写到这里,本应该很顺利,可是,在驱动程序加载进内核的时候,明显是报错。错误我就不贴出来了,可是我可以将中断信息附上:
从这里,可以看出来,PIO中断号60已经注册进内核了。我们现在使用的一个IO中断是被包含在里面的。所以,需要在内核中找到sunxi-gpio是怎么去注册中断,而我们就需要将我们的中断程序内容附加到已经注册的中断上去。
在 marsboardmarsboard-a20-linux-sdk-v1.2linux-sunxidriversgpioGpio-sunxi.c中我们可以找到函数:
里面最重要的函数是:
最终调用的是:
然而,它又被赋值了:
在一定程度的意义上,gpio-sunxi.c已经将中断基本处理做好了,我们要做的只是和它共享中断。
sys_config.fex文件配置如下:
从上面的实验中,已经发现在request_irq中设置边沿等等触发,在安装ko文件的时候,都会报错,从这里看出,在共享中断的时候,是不允许设置其他的内容的。那么,只能去找A20寄存器中关于io口中断的设置。在这些设置已经设置好的情况下,中断应该就能响应了。这里贴出一个比较简单的驱动程序:
int main(int argc,char *argv[])
{
int fd;
int val;
fd = open("/dev/key_device",O_RDWR);
if(fd < 0){
printf("---open file error----
");
return -1;
}
}
ifeq ($(KERNELRELEASE),)
KERNEL_DIR=/home/wityuan/Downloads/MarsBoard-A20-Linux-SDK-V1.2/linux-sunxi
PWD=$(shell pwd)
moles:
$(MAKE) -C $(KERNEL_DIR) M=$(PWD) moles
arm-linux-gnueabihf-gcc -o key key.c
moles_install:
$(MAKE) -C $(KERNEL_DIR) M=$(PWD) moles_install
clean:
rm -rf *.ko *.o .tmp_versions .mod.c moles.order Mole.symvers . .cmd
else
obj-m:=key.o
endif
root@marsboard:~# ./key_test
---script.bin key get ok,value:1----
key irq Interrupt
==IRQ_EINT22=
key irq Interrupt
==IRQ_EINT22=
key irq Interrupt
==IRQ_EINT22=
key irq Interrupt
==IRQ_EINT22=
key irq Interrupt
==IRQ_EINT22=
key irq Interrupt
==IRQ_EINT22=
key irq Interrupt
==IRQ_EINT22=
key irq Interrupt
==IRQ_EINT22=
key irq Interrupt
==IRQ_EINT22=
^Ckey irq Interrupt
Other Interrupt
----key close----
root@marsboard:~#
root@marsboard:~#
/* EINT type PIO controller registers */
/* EINT type defines */
static int int_cfg_addr[] = {PIO_INT_CFG0_OFFSET,
PIO_INT_CFG1_OFFSET,
PIO_INT_CFG2_OFFSET,
PIO_INT_CFG3_OFFSET};
/* Setup GPIO irq mode (FALLING, RISING, BOTH, etc */
})
/* Enable GPIO interrupt for pin */
})
/* Disable GPIO interrupt for pin */
})
/* Set GPIO pin mode (input, output, etc) /
/ GPIO port has 4 cfg 32bit registers (8 pins each) /
/ First port cfg register addr = port_num * 0x24 */
})
static script_gpio_set_t info;
static unsigned key_handler1;
static unsigned key_handler2;
static struct class *key_class;
static struct device *key_device;
static unsigned int key_major;
static unsigned int key_value;
static void *__iomem gpio_addr = NULL;
static int key_open(struct inode *inode, struct file *filp);
static ssize_t key_read (struct file *, char __user *, size_t, loff_t *);
static ssize_t key_write (struct file *filp, const char __user *buf, size_t len, loff_t *off);
static int key_close(struct inode *inode, struct file *filp);
struct file_operations key_operations = {
.owner = THIS_MODULE,
.open = key_open,
.read = key_read,
.write = key_write,
.release = key_close,
};
struct key_str{
char *name;
int val;
};
struct key_str g_key_str[2]={{"key1",0x1},{"key2",2}};
static irqreturn_t key_irq_handler1(int irq, void *dev_id)
{
int err;
int reg_val = 0;
int ret_val = 0;
}
static irqreturn_t key_irq_handler2(int irq, void *dev_id)
{
}
static ssize_t key_read (struct file *file, char __user *buf, size_t len, loff_t *off)
{
unsigned int value = 0;
value = _to_user(buf,&key_value,4);
}
static int key_open(struct inode *inode, struct file *filp)
{
int err = 0;
int key_test_enabled = 0;
int ret = 0;
}
static ssize_t key_write (struct file *filp, const char __user *buf, size_t len, loff_t *off)
{
}
static int key_close(struct inode *inode, struct file *filp)
{
SUNXI_MASK_GPIO_IRQ(gpio_addr,IRQ_EINT22);
SUNXI_MASK_GPIO_IRQ(gpio_addr,IRQ_EINT23);
}
static int __init key_init(void)
{
key_major = register_chrdev(0, "key_chrdev", &key_operations);
}
static void __exit key_exit(void)
{
if (gpio_addr) {
iounmap(gpio_addr);
}
}
mole_init(key_init);
mole_exit(key_exit);
MODULE_DESCRIPTION("Driver for key");
MODULE_AUTHOR("wit_yuan");
MODULE_LICENSE("GPL");
ifeq ($(KERNELRELEASE),)
KERNEL_DIR=/home/wityuan/Downloads/MarsBoard-A20-Linux-SDK-V1.2/linux-sunxi
PWD=$(shell pwd)
moles:
$(MAKE) -C $(KERNEL_DIR) M=$(PWD) moles
arm-linux-gnueabihf-gcc -o key key.c
moles_install:
$(MAKE) -C $(KERNEL_DIR) M=$(PWD) moles_install
clean:
rm -rf *.ko *.o .tmp_versions .mod.c moles.order Mole.symvers . .cmd
else
obj-m:=key.o
endif
int main(int argc,char *argv[])
{
int fd;
int val;
fd = open("/dev/key_device",O_RDWR);
if(fd < 0){
printf("---open file error----
");
return -1;
}
}
/* EINT type PIO controller registers */
/* EINT type defines */
static wait_queue_head_t key_data_avail;
static unsigned int key_done = 0;
static int int_cfg_addr[] = {PIO_INT_CFG0_OFFSET,
PIO_INT_CFG1_OFFSET,
PIO_INT_CFG2_OFFSET,
PIO_INT_CFG3_OFFSET};
/* Setup GPIO irq mode (FALLING, RISING, BOTH, etc */
})
/* Enable GPIO interrupt for pin */
})
/* Disable GPIO interrupt for pin */
})
/* Set GPIO pin mode (input, output, etc) /
/ GPIO port has 4 cfg 32bit registers (8 pins each) /
/ First port cfg register addr = port_num * 0x24 */
})
static script_gpio_set_t info;
static unsigned key_handler1;
static unsigned key_handler2;
static struct class *key_class;
static struct device *key_device;
static unsigned int key_major;
static unsigned int key_value;
static void *__iomem gpio_addr = NULL;
static int key_open(struct inode *inode, struct file *filp);
static ssize_t key_read (struct file *, char __user *, size_t, loff_t *);
static ssize_t key_write (struct file *filp, const char __user *buf, size_t len, loff_t *off);
static int key_close(struct inode *inode, struct file *filp);
struct file_operations key_operations = {
.owner = THIS_MODULE,
.open = key_open,
.read = key_read,
.write = key_write,
.release = key_close,
};
struct key_str{
char *name;
int val;
};
struct key_str g_key_str[2]={{"key1",0x1},{"key2",2}};
static irqreturn_t key_irq_handler1(int irq, void *dev_id)
{
int err;
int reg_val = 0;
int ret_val = 0;
}
static irqreturn_t key_irq_handler2(int irq, void *dev_id)
{
}
static ssize_t key_read (struct file *file, char __user *buf, size_t len, loff_t *off)
{
unsigned int value = 0;
}
static int key_open(struct inode *inode, struct file *filp)
{
int err = 0;
int key_test_enabled = 0;
int ret = 0;
}
static ssize_t key_write (struct file *filp, const char __user *buf, size_t len, loff_t *off)
{
}
static int key_close(struct inode *inode, struct file *filp)
{
SUNXI_MASK_GPIO_IRQ(gpio_addr,IRQ_EINT22);
SUNXI_MASK_GPIO_IRQ(gpio_addr,IRQ_EINT23);
}
static int __init key_test_init(void)
{
key_major = register_chrdev(0, "key_chrdev", &key_operations);
}
static void __exit key_test_exit(void)
{
if (gpio_addr) {
iounmap(gpio_addr);
}
}
mole_init(key_test_init);
mole_exit(key_test_exit);
MODULE_DESCRIPTION("Driver for key");
MODULE_AUTHOR("wit_yuan");
MODULE_LICENSE("GPL");
ifeq ($(KERNELRELEASE),)
KERNEL_DIR=/home/wityuan/Downloads/MarsBoard-A20-Linux-SDK-V1.2/linux-sunxi
PWD=$(shell pwd)
moles:
$(MAKE) -C $(KERNEL_DIR) M=$(PWD) moles
arm-linux-gnueabihf-gcc -o key key.c
moles_install:
$(MAKE) -C $(KERNEL_DIR) M=$(PWD) moles_install
clean:
rm -rf *.ko *.o .tmp_versions .mod.c moles.order Mole.symvers . .cmd
else
obj-m:=key.o
endif
int main(int argc,char *argv[])
{
int fd;
int val;
fd = open("/dev/key_device",O_RDWR);
if(fd < 0){
printf("---open file error----
");
return -1;
}
}
㈣ 一 . 树莓派A20 基本环境搭建 1
我的实验环境:
1.交叉编译工具链:gcc-linaro-arm-linux-gnueabihf-4.8-2014.04_linux(4.8.2).tar.xz
2.SDK文件:MarsBoard-A20-Linux-SDK-V1.1.tar.bz2
在安装gcc-arm-linux-gnueabi的时候,会自动安装上gcc-4.6-arm-linux-gnueabi,如下图所示:
第二个文件的安装很重要,尽管后面提示的编译错误,缺少的是arm-linux-...,但是安装这个文件还是挺好用的。
根据前面安装的一些安装包,其实本节的交叉编译工具链可以不用操作。因为已经包含了本节所做的了。
我得先将vim改一下,否则按住上下左右,会出现A,B,C,D。
再/etc/profile最后一行添加内容:
然后:
这里做一些简要的说明,在网址: 链接 上有一些说明,从说明中,我们可以看到我们用的sdk的架构。
pack文件夹
选择2,server版本。
之后:
能找到的livesuit_marsboard_a20_debian.img就是生成的镜像文件。如果要修改名字,可以:
这里面就包含了image.cfg,找到里面的一项:
修改为其他的名字即可。
选择2,server版本。
1.若出现如下报错:
可以:
如果出现:
但是其实这些文件都是有的,可以不妨:
再次编译,则问题如下:
仔细找编译的shell输出文件,发现是rootfs/下的gz文件找不到,这是因为我做前面的操作的时候,希望生成自己的rootfs_my.tar.gz文件。现在我重新将该文件放到rootfs/下,再次编译,我将最后的结果放在下面:
这样表示成功了。
下面列入生成的镜像:
livesuit_superpi3.img即是。
1.我在做上面的操作的时候,夹杂的使用了两个开发板,一个是marsboard出品的a20开发板,另外一个是风火轮出品的a20树莓派3卡片电脑,说实在的,看起来风火轮附带板子资料挺多,但是其真正写的资料可没用心做,实在不是一个榜样,在该开发板上做非核心开发,是可以的,但是做研发,还是需要做考量。
烧写成功后,打印的内容如下,作为日志信息,留作以后分析:
㈤ C语言 ,输入a1,a2,a3。。a20,从大到小排序后输出,并且输出现在每个元素对应的原来的次序
#include<stdio.h>
struct abc{//定义结构体
int a,b;
};
int main()
{int i,j;
struct abc arr[21];
for(i=1;i<21;i++)//共20个数据,放在arr[1]~arr[20]
{arr[i].a=i;//输入时的编号
scanf("%d",&arr[i].b);//输入的数据
}
for(i=1;i<21;i++)//冒泡排序
for(j=1;j<21-i;j++)
if(arr[j].b<arr[j+1].b)
{arr[0]=arr[j];
arr[j]=arr[j+1];
arr[j+1]=arr[0];
}
for(i=1;i<21;i++)//输出数据
printf("%3d",arr[i].b);
printf(" ");
for(i=1;i<21;i++)//输出原始编号
printf("%3d",arr[i].a);
printf(" ");
return 0;
}
㈥ 全志双核A20的应用实例
全志双核A20应用于android平台的嵌入式开发平台,应用领域广泛,包括车载导航终端、数字标牌方案、智能家居、安防控制等。视美泰为全志双核A20开发了完整的应用平台解决方案ArmPC。
ArmPC是配合客户评估全志A10/A20方案推出的一体板。板卡集成多媒体解码、液晶驱动、以太网、HDMI、WIFI、摄像头、蓝牙,GPS,重力感应器于一体,支持绝大部分当前流行的视频及图片格式解码,支持HDMI/VGA视频输出,双8位的LVDS驱动,可以驱动各种TFT LCD显示屏。