-
我也遇到过几块板,后来重新焊接了一下就没再出现过了。
-
不是我以为一定要专用的CS信号才能实现我要的功能,我只是想SPI自己的CS和普通IO与SPI的CLK同步的问题
,它两会不会有区别
-
我今天换到了!
-
谢谢各位支持(友情的也算上)
galle 你说的设置我是做的
1.tool\program AVR\CONNECT(如下截图)
2.上面1中CONNECT之后,弹出下面设置(截图为熔丝位设置)
我看上面设置跟其他人一样 但是点run的时候 还是出现上面的问题 各位再帮我指点一下。
-
引用 4 楼 great_bug 的回复:
你两次访问TMOD寄存器,两次的操作互相冲突.
正解,楼主还可以 去网上 搜索下,网上应该有很多类似的代码啊。
-
老板以前没有注意过这事~他始终以为能用串口2烧写程序(iap模式),老板不想联系以前的老人~看他们的样子很为难~我也没有办法强求~原来专门焊板子的人~现在也不在了~(我刚到不久~才接管的这个项目,来的时候,他们都不在了,我在了解板子的时候,才发现这个问题~但是老板给我说明几点:第一:老人绝对没有用仿真器,第二:应该是直接用串口下的,第三:没有注意过他们第一次是怎么把程序灌下去。)
所以十分无奈~
-
应该是我们自己系统平台的问题
-
开发一个流驱动就行了
-
我用的是CPU自带的扫描方式,在原来按键的基础上做的。基本思路还是原来的处理,只是加了一些键,用了25个键,以其中一个按键为例,代码修改大概是这样的:
1:s3c6410kbd.cpp先修改这个数组_BUTTON_EVENT{key_switch, //切换键
。
。
。
KEYNUM
}BUTTON_EVENT;
}
2:s3c6410kbd.cpp中再修改函数WaitforKeyEventThread()
HandleUp[key_switch]= CreateEvent(NULL,FALSE,FALSE,(TEXT("key_switch_UP")));
HandleDown[key_switch] = CreateEvent(NULL,FALSE,FALSE,(TEXT("key_switch_DOWN")));
if((NULL == HandleUp[key_switch]) || (NULL == HandleDown[key_switch]))
{
RETAILMSG(1,(TEXT("::Create key_switch button event failed!!\r\n")));
}
。
。
。
while( 1 )
{
singleNum = WaitForMultipleObjects( KEYNUM, HandleDown, FALSE, INFINITE);
//RETAILMSG(1,(TEXT("(singleNum is %d))**\r\n"),singleNum));
if ( ! ResetEvent( HandleDown[singleNum]) )
{
RETAILMSG(1,(TEXT("::ResetEvent Error !!\r\n")));
MessageBox(NULL, L"ResetEvent Error", L"Error", MB_OK);
}
switch( singleNum )
{
case key_switch:
scan_code=0x25; //VK_F1
SetEvent( m_hevInterrupt );
delay(10);
SetEvent( m_hevInterrupt );
//printf("Press key_9\r\n");
RETAILMSG(1,(TEXT("::key_switch !!\r\n")));
break;
3:在keyscan.cpp中扫描Key_Scan_Thread()中是这样改的
//if(KEY_EVENT[R][C]==KEY_EVENT[0][0])
if(( R==0) && (C==0) )
{
Key_Press_Down[key_switch]=1;
HandleUp_Down[key_switch]=TRUE;
SetEvent(HandleDown[key_switch]);
}
else
{
Key_Press_Down[key_switch]=0;
HandleUp_Down[key_switch]=FALSE;
}
4:keysan.cpp定义事件Create_Key_Event
//-------------定义事件----------------------------
//"key_switch" Button Event
HandleUp[key_switch]= CreateEvent(NULL,FALSE,FALSE,(TEXT("key_switch_UP")));
HandleDown[key_switch] = CreateEvent(NULL,FALSE,FALSE,(TEXT("key_switch_DOWN")));
if((NULL == HandleUp[key_switch]) || (NULL == HandleDown[key_switch]))
{
RETAILMSG(1,(TEXT("::Create key_switch button event failed!!\r\n")));
goto ButtonThreadFail;
}
其余24个键和这个方法一样处理的,
现象就是有时候能灵,有时候不灵,楼上的热心人帮看看吧
-
你可以用下面的代码在试验箱中显示图片:
void CMyLinkMan::LoadPhoto(CString pszFilename)
{
HDC hDC;
//pszFilename = _T(". \\Flash Disk \\photo\\xixi.bmp");
CFile cf;
// 打开位图文件
if (!cf.Open(pszFilename, CFile::modeRead))
return ;
// 获得位图文件大小,并减去BITMAPFILEHEADER的长度
DWORD dwDibSize;
dwDibSize = cf.GetLength() - sizeof(BITMAPFILEHEADER);
// 为DIB位图分配内存
unsigned char *pDib;
pDib = new unsigned char[dwDibSize];
if (pDib == NULL)
return ;
BITMAPFILEHEADER BFH;
// 读取位图文件数据BFH.bfType != 'MB' ||
try
{
// 文件格式是否正确有效
if ( cf.Read(&BFH, sizeof(BITMAPFILEHEADER)) != sizeof(BITMAPFILEHEADER)||cf.Read(pDib, dwDibSize) != dwDibSize)
{// delete []pDib;
return ;
}
}
catch (CFileException *e)
{
e->Delete();
delete []pDib;
// return (FALSE);
}
BITMAPINFO *bmpInfo1,bmpInfo;
BYTE *pPhotoBits;
bmpInfo1 = (BITMAPINFO*)pDib;
bmpInfo.bmiHeader = bmpInfo1->bmiHeader;
hDC= ::GetDC(m_hWnd);
DWORD d=GetLastError();
m_hBitmap = CreateDIBSection(hDC, &bmpInfo, DIB_RGB_COLORS, (void **)&pPhotoBits, NULL, 0);
memcpy(pPhotoBits, &pDib[sizeof(BITMAPINFOHEADER)], dwDibSize-sizeof(BITMAPINFOHEADER));
delete []pDib;
cf.Close();
}
void CMyLinkMan::ShowPhoto()
{
HDC hdcMem;
HDC hDC;
DWORD d=GetLastError();
LoadPhoto(m_photo);
d=GetLastError();
if (NULL == m_hBitmap)
{
HBRUSH hBrush;
RECT rect;
SetRect(&rect, PHOTO_X, PHOTO_Y, PHOTO_X + PHOTO_WIDTH, PHOTO_Y + PHOTO_HEIGHT);
hDC = GetDC(m_hWnd);
hBrush = CreateSolidBrush(RGB(192, 192, 192));
FillRect(hDC, &rect, hBrush);
DeleteObject(hBrush);
ReleaseDC(m_hWnd, hDC);
return;
}
else
{
// Retrieve the device context handle
hDC = GetDC(m_hWnd);
hdcMem = CreateCompatibleDC(hDC);
d=0;
d=GetLastError();
SelectObject(hdcMem, m_hBitmap);
d=GetLastError();
// Display bitmap, //
BitBlt( hDC, PHOTO_X, PHOTO_Y,PHOTO_WIDTH,PHOTO_HEIGHT, hdcMem, 0,0,SRCCOPY);
d=GetLastError();
// Delete bitmap object, release the device contexts,
//
DeleteDC(hdcMem);
ReleaseDC(m_hWnd, hDC);
}
}
-
你发送的时候进入中断,但可能也接受了数据,再次进入中断,导致出错
-
引用 10 楼 xumercury 的回复:
引用 9 楼 flandy1982 的回复:感觉学习wince驱动复杂的地方就是你要非常熟悉微软限定的架构. 多啃MSDN吧.
经典。呵呵。WINCE开发看过一本书上写的。是做“填空题”。题目框架是微软给的。MSDN就是这个考试题的教材。
向两位高人学习啦!经典+简练!
-
自己试试看罗,我觉得不会出异常情况。
但锁定GPIO配置后,重写GPIO配置岂非画蛇添足?
-
http://www.toopoo.com/book/tushu/81077-382-8.html
楼主还是去买本书吧。
-
引用 24 楼 lin0119 的回复:
谢谢jiqiang01234~
你的代码极像MFC的风格...像keil里面好像没有LPVOID的类型定义.
8位单片机内存很小。估计你也不曾在单片机里面用过这样的代码吧。
我突然对MFC里面所讲的函数模板有点理解了~呵呵,谢谢~!
“你的代码极像MFC的风格...像keil里面好像没有LPVOID的类型定义.”
我在vc6.0中调试的代码,贴过来的时候没仔细检查变量类型,LPVOID就是void*。我自己的单片机程序中已经将这些类型重新定义了,所以看起来和VC的很像,在单片机程序中我很少用c语言的原始类型,感觉在可读性上稍微差一些。
“8位单片机内存很小。估计你也不曾在单片机里面用过这样的代码吧。”
此言差矣,我的程序中经常用到函数指针数组,这是面向对象中“多态”的基石,系统开销并没增加多少,和函数调用没什么大区别。但,程序结构灵活很多。
“我突然对MFC里面所讲的函数模板有点理解了~呵呵,谢谢~!”
c语言中有“模板”味道的恐怕也就是void*了,但毕竟比真正的模板相去甚远。但可以领略其内涵。
-
UP
-
恭喜
-
您好,vigia ,device例程发布大概还需要多久?
-
学习来的
-
同意5楼的观点