導航:首頁 > 編程語言 > a20編程序實例

a20編程序實例

發布時間:2023-02-06 02:05:21

㈠ 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顯示屏。

閱讀全文

與a20編程序實例相關的資料

熱點內容
如何用app覆蓋全部曲庫 瀏覽:602
變異布林源碼 瀏覽:684
表格加密設置列印區域 瀏覽:437
卡耐基pdf下載 瀏覽:922
現在最流行的單片機 瀏覽:88
機頂盒刷機源碼 瀏覽:985
編碼pdf下載 瀏覽:944
隔壁同學app怎麼 瀏覽:299
c語言宏命令 瀏覽:542
php卡死源碼 瀏覽:574
time庫中的clock函數python 瀏覽:989
cad視覺移動命令怎麼打開 瀏覽:821
安卓java調用python 瀏覽:395
java標准時間 瀏覽:137
華為伺服器湖北渠道商雲主機 瀏覽:30
韓式面部護理解壓視頻 瀏覽:301
pdf換成jpg圖片 瀏覽:897
dh加密演算法 瀏覽:107
安卓手機如何隱藏微信信息提示 瀏覽:632
nodejs解壓縮 瀏覽:262