关于触摸屏的几个小问题?

kangyonghui 2011-01-01 03:59:22
#include <s3c2440a.h>

#define PUBLIC //这种用法是什么意思?是宏定义嘛?不懂,有啥用。
#define PRIVATE static


#define TSP_SAMPLE_RATE_LOW 50
#define TSP_SAMPLE_RATE_HIGH 50
#define TSP_SAMPLETICK_LOW (17 * 1000 / TSP_SAMPLE_RATE_LOW)
#define TSP_SAMPLETICK_HIGH (17 * 1000 / TSP_SAMPLE_RATE_HIGH)
以上四个函数是MDD里面的吧, 那些参数是怎么确定的呢?屏的大小不一样是不是,参数不一样,我只要不明白的是,屏幕的
大小的参数才哪里修改呢,小第没看过bootloarder,是不是在那个里面呢。


同理一下函数的参数,
#define ADCPRS 49 // 200

#define TSP_MINX 30
#define TSP_MINY 30

#define TSP_MAXX 1000
#define TSP_MAXY 980

#define TSP_CHANGE 15
#define TSP_INVALIDLIMIT 40


#define TSP_LCDX (LCD_XSIZE_TFT * 4)
#define TSP_LCDY (LCD_YSIZE_TFT * 4)

#define TSP_SAMPLE_NUM 4

#ifndef OAL_INTR_FORCE_STATIC
#define OAL_INTR_FORCE_STATIC (1 << 2)
#endif

DWORD gIntrTouch = SYSINTR_NOP;
DWORD gIntrTouchChanged = SYSINTR_NOP;

extern "C" const int MIN_CAL_COUNT = 1;

PRIVATE INT TSP_CurRate = 1;
最后一个小问题:
学习驱动开始是不是看懂会移植就好呢,还是其他,我有些函数看的不是很清楚,不是很理解,网上百度了下,很多函数都是一样的,基本一摸一样的,是不是驱动学习就是看懂函数,如何修改就行了呢。
...全文
201 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
kangyonghui 2011-01-04
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 loongembedded 的回复:]

呵呵,没关系的,其实我在看的时候也遇到了这个问题的,因为我也在学习touch这个驱动的,我也没搞懂上面那个兄弟说的这个TSP_RegAlloc(PVOID addr, INT sz)。为什么我在按键驱动里面也没有?我今天也郁闷了一天,呵呵
--->重点不是TSP_RegAlloc这个函数外壳,重点是TSP_RegAlloc这个函数里面VirtualAlloc函数和VirtualCopy函数的结……
[/Quote]

特别感谢你,
还有EmbeddedLong~~~
结贴子去。
loongembedded 2011-01-04
  • 打赏
  • 举报
回复
呵呵,没关系的,其实我在看的时候也遇到了这个问题的,因为我也在学习touch这个驱动的,我也没搞懂上面那个兄弟说的这个TSP_RegAlloc(PVOID addr, INT sz)。为什么我在按键驱动里面也没有?我今天也郁闷了一天,呵呵
--->重点不是TSP_RegAlloc这个函数外壳,重点是TSP_RegAlloc这个函数里面VirtualAlloc函数和VirtualCopy函数的结合使用,按键驱动肯定不会有这个函数了,TSP_RegAlloc是touch驱动的,按键去偶的那个中的初始化函数中肯定也会有调用VirtualAlloc函数和VirtualCopy函数。
kangyonghui 2011-01-03
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 loongembedded 的回复:]

我可以清楚的看到他是对GPIO PWM ADC这三个分配虚拟地址,然后映射到屋里地址,我主要不明白的是这个在函数在这个触摸屏里面给谁分配虚拟地址?起到的作用,比如GPIO是为了用IO口。 PWM是为了用定时器,ADC是为了采集电压等。
---》就是给你提到的“GPIO是为了用IO口。 PWM是为了用定时器,ADC是为了采集电压”分配啊,我觉得我们还是不要再这个帖子谈论了,这样对楼主也许不公平。……
[/Quote]

呵呵,没关系的,其实我在看的时候也遇到了这个问题的,因为我也在学习touch这个驱动的,我也没搞懂上面那个兄弟说的这个TSP_RegAlloc(PVOID addr, INT sz)。为什么我在按键驱动里面也没有?我今天也郁闷了一天,呵呵
loongembedded 2011-01-03
  • 打赏
  • 举报
回复
我可以清楚的看到他是对GPIO PWM ADC这三个分配虚拟地址,然后映射到屋里地址,我主要不明白的是这个在函数在这个触摸屏里面给谁分配虚拟地址?起到的作用,比如GPIO是为了用IO口。 PWM是为了用定时器,ADC是为了采集电压等。
---》就是给你提到的“GPIO是为了用IO口。 PWM是为了用定时器,ADC是为了采集电压”分配啊,我觉得我们还是不要再这个帖子谈论了,这样对楼主也许不公平。
EmbeddedLong 2011-01-03
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 loongembedded 的回复:]

引用 15 楼 embeddedlong 的回复:
引用 14 楼 loongembedded 的回复:

嘻嘻,小弟,借地方也顺便问个问题啊
PRIVATE PVOID //这个是什么意思呢?
TSP_RegAlloc(PVOID addr, INT sz)
--->因为PRIVATE得宏定义是#define PRIVATE static,所以上面的函数头相当于
static P……
[/Quote]

恩,那是分配那个的虚拟地址呢,可能我没有表达清楚。
比如:

TSP_VirtualAlloc(VOID)
{
BOOL r = FALSE;

RETAILMSG(0,(TEXT("::: TSP_VirtualAlloc()\r\n")));

do
{
v_pIOPregs = (volatile S3C2440A_IOPORT_REG *)TSP_RegAlloc((PVOID)S3C2440A_BASE_REG_PA_IOPORT, sizeof(S3C2440A_IOPORT_REG));
if (v_pIOPregs == NULL)
{
ERRORMSG(1,(TEXT("For IOPreg: VirtualAlloc failed!\r\n")));
break;
}

v_pADCregs = (volatile S3C2440A_ADC_REG *)TSP_RegAlloc((PVOID)S3C2440A_BASE_REG_PA_ADC, sizeof(S3C2440A_ADC_REG));
if (v_pADCregs == NULL)
{
ERRORMSG(1,(TEXT("For ADCreg: VirtualAlloc failed!\r\n")));
break;
}

v_pINTregs = (volatile S3C2440A_INTR_REG *)TSP_RegAlloc((PVOID)S3C2440A_BASE_REG_PA_INTR, sizeof(S3C2440A_INTR_REG));
if (v_pADCregs == NULL)
{
ERRORMSG(1,(TEXT("For INTregs: VirtualAlloc failed!\r\n")));
break;
}

v_pPWMregs = (volatile S3C2440A_PWM_REG *)TSP_RegAlloc((PVOID)S3C2440A_BASE_REG_PA_PWM, sizeof(S3C2440A_PWM_REG));
if (v_pPWMregs == NULL)
{
ERRORMSG(1,(TEXT("For PWMregs: VirtualAlloc failed!\r\n")));
break;
}

r = TRUE;
} while (0);

if (!r)
{
TSP_VirtualFree();

RETAILMSG(0,(TEXT("::: TSP_VirtualAlloc() - Fail\r\n")));
}
else
{
RETAILMSG(0,(TEXT("::: TSP_VirtualAlloc() - Success\r\n")));
}


return r;
}
我可以清楚的看到他是对GPIO PWM ADC这三个分配虚拟地址,然后映射到屋里地址,我主要不明白的是这个在函数在这个触摸屏里面给谁分配虚拟地址?起到的作用,比如GPIO是为了用IO口。 PWM是为了用定时器,ADC是为了采集电压等。
谢谢大哥!
loongembedded 2011-01-03
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 embeddedlong 的回复:]
引用 14 楼 loongembedded 的回复:

嘻嘻,小弟,借地方也顺便问个问题啊
PRIVATE PVOID //这个是什么意思呢?
TSP_RegAlloc(PVOID addr, INT sz)
--->因为PRIVATE得宏定义是#define PRIVATE static,所以上面的函数头相当于
static PVOID TSP_RegAlloc(PVOID addr……
[/Quote]
这个函数主要是分配虚拟地址,然后让分配的虚拟地址映射到物理地址
EmbeddedLong 2011-01-02
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 loongembedded 的回复:]

引用 7 楼 maoenpei002 的回复:
#define PUBLIC
这种定义的用处是宏开关,比方说后面可以有这之类的代码:
#ifdef PUBLIC
****(某些需要编译的代码)
#else
*****(另外一些需要编译的代码)
#endif

这是一种常用的方式,但我觉得这里PUBLIC的宏定义#define PUBLIC相当于#define PUBLIC ex……
[/Quote]

嘻嘻,小弟,借地方也顺便问个问题啊
PRIVATE PVOID //这个是什么意思呢?
TSP_RegAlloc(PVOID addr, INT sz)
{
PVOID reg;

reg = (PVOID)VirtualAlloc(0, sz, MEM_RESERVE, PAGE_NOACCESS);

if (reg)
{
if (!VirtualCopy(reg, (PVOID)((UINT32)addr >> 8), sz, PAGE_PHYSICAL | PAGE_READWRITE | PAGE_NOCACHE ))
{
//VirtualFree(reg, sz, MEM_RELEASE);
VirtualFree(reg, 0, MEM_RELEASE);
reg = NULL;
}
}

return reg;
}
贝隆 2011-01-02
  • 打赏
  • 举报
回复
新手,学习一下
EmbeddedLong 2011-01-02
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 loongembedded 的回复:]

引用 7 楼 maoenpei002 的回复:
#define PUBLIC
这种定义的用处是宏开关,比方说后面可以有这之类的代码:
#ifdef PUBLIC
****(某些需要编译的代码)
#else
*****(另外一些需要编译的代码)
#endif

这是一种常用的方式,但我觉得这里PUBLIC的宏定义#define PUBLIC相当于#define PUBLIC ex……
[/Quote]
恩,前面那个哥们说的:
#define PUBLIC
这种定义的用处是宏开关,比方说后面可以有这之类的代码:
#ifdef PUBLIC
****(某些需要编译的代码)
#else
*****(另外一些需要编译的代码)
#endif
这个应该是C里面的,public关于C++这个我也问了很多人,答案说法不一,是不是开始学习驱动的时候,没人管这些啊,照着修改代码就可以吧。
loongembedded 2011-01-02
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 maoenpei002 的回复:]
#define PUBLIC
这种定义的用处是宏开关,比方说后面可以有这之类的代码:
#ifdef PUBLIC
****(某些需要编译的代码)
#else
*****(另外一些需要编译的代码)
#endif
[/Quote]
这是一种常用的方式,但我觉得这里PUBLIC的宏定义#define PUBLIC相当于#define PUBLIC extern,不知道这样的理解是否正确。
loongembedded 2011-01-02
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 kangyonghui 的回复:]
引用 4 楼 loongembedded 的回复:

#define TSP_SAMPLE_RATE_LOW 50
#define TSP_SAMPLE_RATE_HIGH 50
#define TSP_SAMPLETICK_LOW (17 * 1000 / TSP_SAMPLE_RATE_LOW)
#define TSP_SAMPLETICK_HIGH (17 * 1000 / TSP……
[/Quote]
是的,BSP包中没有包含MDD层的代码,MDD层代码一般在\WINCE600\PUBLIC\COMMON\OAK\DRIVERS中定义,触摸屏驱动的MDD层就在\WINCE600\PUBLIC\COMMON\OAK\DRIVERS\TOUCH中定义,其中TouchPanelpAttach函数就在\WINCE600\PUBLIC\COMMON\OAK\DRIVERS\TOUCH\TCHMAIN\tchmain.c下面定义
EmbeddedLong 2011-01-02
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 loongembedded 的回复:]

嘻嘻,小弟,借地方也顺便问个问题啊
PRIVATE PVOID //这个是什么意思呢?
TSP_RegAlloc(PVOID addr, INT sz)
--->因为PRIVATE得宏定义是#define PRIVATE static,所以上面的函数头相当于
static PVOID TSP_RegAlloc(PVOID addr, INT sz)
用static声明的函数表示这是个内……
[/Quote]

恩大哥,我意思是说折耳根函数的作用是什么,在这个触摸屏里面?
loongembedded 2011-01-02
  • 打赏
  • 举报
回复
嘻嘻,小弟,借地方也顺便问个问题啊
PRIVATE PVOID //这个是什么意思呢?
TSP_RegAlloc(PVOID addr, INT sz)
--->因为PRIVATE得宏定义是#define PRIVATE static,所以上面的函数头相当于
static PVOID TSP_RegAlloc(PVOID addr, INT sz)
用static声明的函数表示这是个内部函数,这个函数只能被定义它的文件中的其他函数来调用。
kangyonghui 2011-01-01
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 maoenpei002 的回复:]

#define PUBLIC
这种定义的用处是宏开关,比方说后面可以有这之类的代码:
#ifdef PUBLIC
****(某些需要编译的代码)
#else
*****(另外一些需要编译的代码)
#endif
[/Quote]

那怎么直接就用了呢?
PUBLIC VOID
DdsiTouchPanelPowerHandler(BOOL bOff)
{
RETAILMSG(0, (TEXT("::: DdsiTouchPanelPowerHandler()\r\n")));
if (bOff)
{
TSP_PowerOff();
}
else
{
TSP_PowerOn();
}
}

这是触摸屏中的一个代码。在这里什么意思呢?谢谢哈。
maoenpei002 2011-01-01
  • 打赏
  • 举报
回复
#define PUBLIC
这种定义的用处是宏开关,比方说后面可以有这之类的代码:
#ifdef PUBLIC
****(某些需要编译的代码)
#else
*****(另外一些需要编译的代码)
#endif
kangyonghui 2011-01-01
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 loongembedded 的回复:]

#define TSP_SAMPLE_RATE_LOW 50
#define TSP_SAMPLE_RATE_HIGH 50
#define TSP_SAMPLETICK_LOW (17 * 1000 / TSP_SAMPLE_RATE_LOW)
#define TSP_SAMPLETICK_HIGH (17 * 1000 / TSP_SAMPLE_RATE_HIGH)
以上四个函数是M……
[/Quote]
#define TSP_SAMPLE_RATE_LOW 50
#define TSP_SAMPLE_RATE_HIGH 50
#define TSP_SAMPLETICK_LOW (17 * 1000 / TSP_SAMPLE_RATE_LOW)
#define TSP_SAMPLETICK_HIGH (17 * 1000 / TSP_SAMPLE_RATE_HIGH)
以上四个函数是MDD里面的吧,
---》是PDD层的

是不是我们在BSP里面的代码看到的都是PDD层的代码呢,MDD的看不到?
比如:DdsiTouchPanelEnable()这个函数是PDD层实现的,但是调用它的TouchPanelpAttach()函数是MDD层的吧,代码里面没找到。
loongembedded 2011-01-01
  • 打赏
  • 举报
回复
学习驱动开始是不是看懂会移植就好呢,还是其他,
---》学习驱动,开始要知道这个驱动主要实现什么功能的,通过CPU的哪部分什么方式来操作什么外设,搞懂大的架构之后就要深入去看代码,理解CPU的相关控制器是如何控制外设或者是从应用程序的某一个动作到外设的工作是如何配合和工作的。
我有些函数看的不是很清楚,不是很理解,网上百度了下,很多函数都是一样的,基本一摸一样的,是不是驱动学习就是看懂函数,如何修改就行了呢。
---》看懂函数是必须的,但还要知道函数的实际意义,刚开始先看懂,知道怎么改就可以了,随着你学习的深入,你自然就掌握了。
loongembedded 2011-01-01
  • 打赏
  • 举报
回复
#define TSP_SAMPLE_RATE_LOW 50
#define TSP_SAMPLE_RATE_HIGH 50
#define TSP_SAMPLETICK_LOW (17 * 1000 / TSP_SAMPLE_RATE_LOW)
#define TSP_SAMPLETICK_HIGH (17 * 1000 / TSP_SAMPLE_RATE_HIGH)
以上四个函数是MDD里面的吧,
---》是PDD层的
那些参数是怎么确定的呢?屏的大小不一样是不是,参数不一样,
---》怎么确定了,现在记不清楚了,但这些参数和屏的参数应该是无关的。

我只要不明白的是,屏幕的
大小的参数才哪里修改呢,
---》楼主指的屏幕是指LCD吧,LCD显示的参数在eboot\main.c下面和oallib\init.c(wince6.0的目录结构)下面的InitDisplay函数中修改,而设计的LCD时序的参数主要在你的src\inc\s3c2440a_lcd.h下定义
小第没看过bootloarder,是不是在那个里面呢。

下面这么多参数需要你学习这个驱动的时候用心去看就能搞懂了。
loongembedded 2011-01-01
  • 打赏
  • 举报
回复
#define PUBLIC //这种用法是什么意思?是宏定义嘛?不懂,有啥用。
#define PRIVATE static
---》是宏定义的意思,本来也是想和定义#define PRIVATE static一样来定义的,但发现定义了#define PRIVATE static之后,对PUBLIC只需要像上面这样定义就可以区分和PRIVATE的区别了,我觉得
#define PUBLIC 相当于#define PUBLIC extern
「已注销」 2011-01-01
  • 打赏
  • 举报
回复
学习驱动开始是看懂会移植就好,到后面就可以根据前面的经验,结合芯片资料,自己写驱动程序。
加载更多回复(1)

19,498

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 嵌入开发(WinCE)
社区管理员
  • 嵌入开发(WinCE)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧