ddcour 发表于 2008-5-4 22:46:11

希望对IAR库的操作比较熟的仁兄进来看看,谢谢!

那位仁兄对IAR的库操作比较熟呢?我想请教个问题,就是我在做库的时候,想把有些端口在实际使用中可以从新定义,这样能提高库的移植性,
例如程序:
//-------------------------------
//库文件的内容:
#include "io.h"
void out (void)
{
outport ^= bit_0;
}
//--------------------------------
//io.h的内容:

#define bit_0    0x01
#define bit_1    0x02

#define outportP1OUT

void out (void);


在我实际使用的时候,我把out()函数生成后的文件添加新的工程中,也把io.h包含到新的工程中,再把头文件(io.h)的bit_0改成0x02,但是实际上还是按照原来库里的定义运行的,请问IAR支持这种做法吗?要想达到这种思想,应该怎么做呢,希望能得到知道的朋友指点指点,不胜感激!

hanlin 发表于 2008-5-5 01:00:20

所有的c编译器都不会支持你这个想法的.因为编译后的库就好比是一个常数了.里面的所有东西都不可以改变了.

头文件只是用来告诉你,在这个库里你可以用哪些资源.

你的这个想法只能用源码级的编译才可以.

Oliver 发表于 2008-5-5 09:36:34

可以用指针试试看.

ddcour 发表于 2008-5-5 17:53:22

首先谢谢两位仁兄的回答!一楼的仁兄把库的作用说得很明白,比喻很恰当!再说声谢谢!二楼的哥们也给我扩展了一下思路。谢谢两位!如果没有好的办法,就把函数经过传递的方式做,这样就会多出很多判断的代码,看实际使用要求了,谢谢!
那位有更好的办法,不防也说说看。

Oliver 发表于 2008-5-5 18:58:02

端口组用指针,断口位用变量理论上是可以的,我现在的库全部要求硬件定死,不允许改.既然做库就必须有一些条件必须定死.

hanlin 发表于 2008-5-6 15:07:52

对了,想要更改库里的内容可以试一下钩子函数.前段时间看uC/OS II里介绍过钩子函数.这个方法可以改变库的结构.

因为你生成的库只是将调用函数的地址编译进去了.在重要的函数中放入钩子函数就可以了.

our2008 发表于 2011-12-31 11:34:30

我也需要解决这问题

SevenWans 发表于 2013-3-25 22:09:47

这问题难啊,哎,有解决办法没
页: [1]
查看完整版本: 希望对IAR库的操作比较熟的仁兄进来看看,谢谢!