我在使用9261ARM,在WINCE6.0下编程,现在需要使用GPIO,查找到查找到atmel_gpio.h下有
#ifdef __cplusplus
extern "C" int pio_setup (const struct pio_desc *pio_desc, int nb_pio);
extern "C" void pio_set_value (unsigned pin, int value);
extern "C" int pio_get_value (unsigned pin);
#else
/* pio_device_pio_setup: Configure PIO in periph mode according to the platform informations */
extern int pio_setup (const struct pio_desc *pio_desc, int nb_pio);
extern void pio_set_value (unsigned pin, int value);
extern int pio_get_value (unsigned pin);
#endif
应该可以使用这些函数对ARM引脚进行按位操作,又查找到at91sam9261.h有引脚的定义,at91_pio.h有寄存器的定义,新建一个VS2005项目,把上述头文件都包含了,在程序中使用pio_get_value (unsigned pin)函数,编译,提示:无法解析的外部符号 pio_set_value.才发现对应函数的实现没有,那么要使用这三个函数,还必须怎么样呢?求教!!
pio_set_value没有实现呀
一般情况下ap中这么做的时候需要一个lib,就是实现这几个函数的lib
恩!应该是需要一个gpio.lib,我看别人用,好象是要包含这个,可是我没找到!只找到一个2410下的gpio.lib,应该不行吧!谁有9261的gpio.lib,给我一个好吗?呵呵~
引用: 引用 2 楼 lydkk 的回复:
恩!应该是需要一个gpio.lib,我看别人用,好象是要包含这个,可是我没找到!只找到一个2410下的gpio.lib,应该不行吧!谁有9261的gpio.lib,给我一个好吗?呵呵~
估计有点悬,因为不同的线路板对应不同的gpio.lib,如果hw设计不一致,给gpio.lib也不能用
这个gpio.lib是在ATMELBSP中实现的,操作GPIO一般是驱动中做好接口,应用程序调用的,楼主如果需要这个lib可以联系我,QQ93695712
我也想在应用程序中直接使用pio_set_value等函数来操作IO口,可是我添加了atmel_gpio.lib也没编译过,在我的atmel_gpio.c源文件中是实现了pio_set_value函数和pio_get_value函数,但是里面引用了两个外部数据的结构
extern T_PIO_BANK_DESCRIPTION g_PioBankDescTab[];
extern DWORD g_dwOalPioBankNumber;
然后编译的时候就出错:
atmel_gpio.lib(atmel_gpio.obj) : error LNK2001: unresolved external symbol g_dwOalPioBankNumber
atmel_gpio.lib(atmel_gpio.obj) : error LNK2001: unresolved external symbol g_PioBankDescTab
晕死,这两个数据在外面很多嵌套的头文件里面定义,难不成要把这些头文件全部加进来?请高手指点下
另外我在网上查了一下好像感觉像pio_setup、pio_set_value、pio_get_value这几个函数是在编写内置驱动程序里面能用的,在应用程序里面没查到过,为什么呢?
实在没办法,用映射寄存器的方法来操作gpio,希望大家能指点一下。
引用: 引用 5 楼 th007sw 的回复:
我也想在应用程序中直接使用pio_set_value等函数来操作IO口,可是我添加了atmel_gpio.lib也没编译过,在我的atmel_gpio.c源文件中是实现了pio_set_value函数和pio_get_value函数,但是里面引用了两个外部数据的结构
extern T_PIO_BANK_DESCRIPTION g_PioBankDescTab[];
extern DWORD g_dwOalPioBankNumber;
然后编译的时候就出错:
atmel_gpio.lib(atmel_gpio.obj) : error LNK2001: unresolved external symbol g_dwOalPioBankNumber
atmel_gpio.lib(atmel_gpio.obj) : error LNK2001: unresolved external symbol g_PioBankDescTab
晕死,这两个数据在外面很多嵌套的头文件里面定义,难不成要把这些头文件全部加进来?请高手指点下
另外我在网上查了一下好像感觉像pio_setup、pio_set_value、pio_get_value这几个函数是在编写内置驱动程序里面能用的,在应用程序里面没查到过,为什么呢?
实在没办法,用映射寄存器的方法来操作gpio,希望大家能指点一下。
1. 6.0在应用程序模式下不能直接操作硬件寄存器,论坛上有人讨论过,可以搜索一下
2. 对于那种编译错误的话,只能够把它所需的头文件和lib给加全了,呵呵
呵呵,谢谢guopeixin的回复,这样的话我就不用再去研究这种方法了,要把相关的头文件和lib库全给加上那太费时了,就用流封装或映射寄存器的方法好了,我建议楼主考虑考虑
引用: 引用 7 楼 th007sw 的回复:
呵呵,谢谢guopeixin的回复,这样的话我就不用再去研究这种方法了,要把相关的头文件和lib库全给加上那太费时了,就用流封装或映射寄存器的方法好了,我建议楼主考虑考虑
呵呵,是有点麻烦
如果能够改动os的话,直接如你所说的用流接口封装一下比较好,使用起来也方便,呵呵,愚见