-
一、局部变量不要使用太多,尤其是局部大数组,最是杀堆栈的;
二、函数调用纵深不要太大;
三、尽量给堆栈留有余地;
-
文档的版本号和发表时间?
-
我看过了,可是我在读取数据时已经发送过时钟了啊,况且我后面的数据也都是正确的啊?这个P也就是指向SPI2-DR的地址,我没有用库里的SPI-Receive()函数来读取,(我以前用来,也读不出来的,我才想着用指针去读的),我的那几张截图就是说明这个问题的。我感到很是奇怪,希望您帮我解惑一下。谢谢您!
-
while()的顺序不同
-
GetTickCount获取时间是没问题的。
Windows是多任务系统,系统中同时运行着很多线程,CPU需要轮流处理,每个线程每次允许执行大约10ms时间,如果线程无事可做,可以主动放弃分配给它的CPU时间。你的程序每次处理需要78ms,实际上是被分成了8次来执行的,运行过程中CPU来执行了其它线程。系统刚刚启动时,要自动加载很多程序,各个程序分别执行各自的初始化操作,占用CPU时间较多,所以你的程序每执行10ms后需要等待一定的时间后才能继续执行,所以整体过程需要的时间较多。当所有自动加载的程序都初始化完毕后,其它线程占用CPU的时间很少,你的程序在执行过程中被中断的时间很短,所以整体过程需要的时间较少。
-
现在许多晶振电路为了降低EMI,增益接近临界值,一个示波器探头那样的负载有可能使晶振电路停振的.
-
木有啊。我检查过了。我再检查检查
-
网上关于C的资料很多的,可以在eeworld下载频道下载!
-
引用 7 楼 kyzf 的回复:
引用 6 楼 luixing67 的回复:
引用 3 楼 domworldjohn 的回复:
是不是RAM空间不够?
RAM有64M,拷贝25M多的空间,从3020,0000开始,应该够了。
你的RAM总共才64M 吗?
你可以试试 仅拷贝10M 或者15M以及20M等的NAND中的内容。
另外可以 尝试下 在拷贝NAND 时,不要打印LOG 看看,
是的。64Mram.
就是因为有时候加载错误,才在拷贝的时候打印log的
-
; Enable FSMC clock
LDR R0,= 0x00000114
LDR R1,= 0x40021014
STR R0,[R1]
; Enable GPIOD, GPIOE, GPIOF and GPIOG clocks
LDR R0,= 0x000001E0
LDR R1,= 0x40021018
STR R0,[R1]
; SRAM Data lines, NOE and NWE configuration
; SRAM Address lines configuration
; NOE and NWE configuration
; NE3 configuration
; NBL0, NBL1 configuration
LDR R0,= 0x44BB44BB
LDR R1,= 0x40011400
STR R0,[R1]
LDR R0,= 0xBBBBB444
LDR R1,= 0x40011404
STR R0,[R1]
LDR R0,= 0xB44444BB
LDR R1,= 0x40011800
STR R0,[R1]
LDR R0,= 0x44444BBB
LDR R1,= 0x40011804
STR R0,[R1]
LDR R0,= 0x44BBBBBB
LDR R1,= 0x40011C00
STR R0,[R1]
LDR R0,= 0xBBBB4444
LDR R1,= 0x40011C04
STR R0,[R1]
LDR R0,= 0x44BBBBBB
LDR R1,= 0x40012000
STR R0,[R1]
LDR R0,= 0x44444B44
LDR R1,= 0x40012004
STR R0,[R1]
; FSMC Configuration
; Enable FSMC Bank1_SRAM Bank
LDR R0,= 0x00001001
LDR R1,= 0xA0000010
STR R0,[R1]
LDR R0,= 0x00000100
LDR R1,= 0xA0000014
STR R0,[R1]
我在启动码中这样子配置是不是也达到了你说的目的呢?这是我参照STM库文件中的一个SRAM例程修改的。
现在的问题我找到了,只是每次读取外部SRAM的时候才会导致LED亮,但是很奇怪的是我已经把该GPIO置位为复位值了,怎么还可以以PP模式驱动。也许还是没怎么搞明白,我继续查看一下。
-
韦伯,是的,现在可用明显增加了,但是如果按照multi bin的原理,应该能够实现按需加载,也就是说启动的时候只需要加载RAMIMAGE就可以了,但是为什么现在我每次从flash读的时候都是读整个镜像大小,而不是读RAMIMAGE?
-
上面说的那几个变量都是在代码中有默认值,可以被bib文件给改写掉。如果OEM没有指定,那么默认值是写死在代码里的:
LoaderPoolTarget, 3M
LoaderPoolMaximum,8M
FilePoolTarget,1M
FilePoolMaximum,10M
-
问的太白痴了么?咋没人回答呢
-
猜测是给malloc之类的函数用的
-
谢谢楼主分享啊
-
官方教的方法是修改ExportSDK.sdkcfg文件,参考一下:
定制带有模拟器且支持ActiveSync调试的WINCE5.0 SDK
CE版本差别影响估计不大
-
要相信MCU的执行速度,我一般是在中断里面设置标志位,在主程序里判断标志位再执行.UART、SPI、定时器、AD、外部中断全开也没有什么冲突。MCLK用的DCO,7M多一点。
-
引用 14 楼 amorous 的回复:
经过一段时间操作后会有注册表文件被破坏的情况…………
lz能否详细说说是什么操作?
就是普通的跑地图,插拔卡
-
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
int wmId, wmEvent;
PAINTSTRUCT ps;
HDC hdc;
switch (message)
{
case WM_COMMAND:
wmId = LOWORD(wParam);
wmEvent = HIWORD(wParam);
// Parse the menu selections:
switch (wmId)
{
case IDM_HELP_ABOUT:
DialogBox(g_hInst, (LPCTSTR)IDD_ABOUTBOX, hWnd, About);
break;
case IDM_FILE_EXIT:
DestroyWindow(hWnd);
break;
case ID_FILE_KEY:
DialogBox(g_hInst, (LPCTSTR)IDD_DLG_KEY, hWnd, TESTKEY); break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
break;
case WM_CREATE:
g_hWndCommandBar = CommandBar_Create(g_hInst, hWnd, 1);
CommandBar_InsertMenubar(g_hWndCommandBar, g_hInst, IDR_MENU, 0);
CommandBar_AddAdornments(g_hWndCommandBar, 0, 0);
break;
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
// TODO: Add any drawing code here...
EndPaint(hWnd, &ps);
break;
case WM_DESTROY:
CommandBar_Destroy(g_hWndCommandBar);
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}
INT_PTR CALLBACK TESTKEY(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_INITDIALOG:
RECT rectChild, rectParent;
int DlgWidth, DlgHeight; // dialog width and height in pixel units
int NewPosX, NewPosY;
// trying to center the About dialog
if (GetWindowRect(hDlg, &rectChild))
{
GetClientRect(GetParent(hDlg), &rectParent);
DlgWidth = rectChild.right - rectChild.left;
DlgHeight = rectChild.bottom - rectChild.top ;
NewPosX = (rectParent.right - rectParent.left - DlgWidth) / 2;
NewPosY = (rectParent.bottom - rectParent.top - DlgHeight) / 2;
// if the About box is larger than the physical screen
if (NewPosX < 0) NewPosX = 0;
if (NewPosY < 0) NewPosY = 0;
SetWindowPos(hDlg, 0, NewPosX, NewPosY,
0, 0, SWP_NOZORDER | SWP_NOSIZE);
}
return (INT_PTR)TRUE;
case WM_COMMAND:
{
// 调用程序
switch(LOWORD(wParam))
{
case IDOK:
{
BOOL bRet = FALSE;
bRet = ActivateKBHook(g_hInst, LowLevelKeyboardProc); RETAILMSG(1, (TEXT("[TESTKEY] GET ActivateKBHook %d\r\n"), bRet));
break;
}
case IDCANCEL:
{
//EndDialog(hDlg, LOWORD(wParam));
return TRUE;
}
}
break;
}
case WM_CLOSE:
EndDialog(hDlg, message);
return TRUE;
}
return (INT_PTR)FALSE;
}
-
关注