-
美女相当的显眼,你这是显示图片呢,还是实时成像
-
版主没看到吗?
自己顶
-
UPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUP
-
就是,莫非反面的要反着焊?
-
定
-
电流多大?小功率直接线性稳压,电流大则DC-DC
另外,AC-DC模块很多,网上找找看吧,如果对隔离电压要求不高价格应该可以接受
-
支持 支持
-
引用 17 楼 zgq2009 的回复:
谢谢16楼,谢谢大家,我觉得这本书也很适合我
那是,那是一本很经典的书。但你还得知道一些移植方面的知识,得实践,愿和你一起学习交流
-
学习一下1
-
引用 10 楼 xblue3 的回复:
#define FRAME0 {语句...}#define FRAME1 {语句...}#define FRAME2 {语句...}#define FRAME3 {P0=0x0f;P1=0x0f;语句...}#define FRAME4 {P0=0x0f;语句...}
可以保留我的宏吗?一定要定义成方法吗?里面全是P0=0x0f;P1=0x0f;
这些方法都是差不多一样的格式,就是数据不一样...
为何一定要用宏来实现动态选择?没有参数的函数调用,也仅仅比宏多了跳转和返回指令,你的程序如此需要效率,连这点时间都需要节省吗?
更根本的一点是,“宏”是在编译期就确定的,而你的想法是想在运行期动态选择,这是本质的矛盾。因此,根本无法实现把“宏”在运行期进行动态选择。
-
不知谁还有这种卫星机的控制软件能提供出来吗?
或者教教我怎么写这些发送命令,谢谢
-
应该是动态流驱动吧,看看驱动是不是已经加载到HKEY_LOCAL_MACHINE\Drivers\Active 里面了
-
帮顶,我也在做lcd,不过是stn的
-
stm32选择flash启动方式,中断向量表映射到0x08000000,由楼主给出的反汇编可知,复位后主堆栈指针的位置是0x20000678,0x08000004位置的数值是0x08001105,由于cortex-M3只能运行在thumb2状态,所以要保证向PC(R15)写入的数值的bit0必须是1(如果向PC写入的数值的bit0是0,则处理器认为试图切入ARM状态,会产生fault),而实际上stm32的指令是半字对齐的,所以复位后会跳转到0x08001104.
-
引用 2 楼 programmerno1 的回复:
线程打架了,优先级的问题~~~~
really?
-
一般烧到Flash里面是可以直接运行的nb0文件,楼主烧写bin文件是通过什么方式的,可能烧写过程中进行了转换,所以读出来不对。
-
大家还有没有新的思路呢?
-
那个virual PC很烦,我也遇到过,但以前也装过EVC没有这个问题,
不知道是什么? 看过一个人说一个BOOT.INT下面的什么东西,
EVC 换个安装包看看呢
-
引用 40 楼 gooogleman 的回复:
嗯
4.2BSP下是
C:\WINCE500\PLATFORM\smdk2440\KERNEL\HAL\cfw.c(1137):SC_GetTickCount(void)
//------------------------------------------------------------------------------
//
//? DWORD GetTickCount(VOID)? ? Return count of time since boot in milliseconds
//
//------------------------------------------------------------------------------
DWORD
SC_GetTickCount(void)
{
DWORD dwInc = 0, dwPartial = dwPartialCurMSec;
DWORD curReturnMSec;
ULARGE_INTEGER cdummy = {0, 0};
curReturnMSec=*pCurMSec;
CPUGetSysTimerCountElapsed(RESCHED_PERIOD, &dwInc, &dwPartial, &cdummy);
return (curReturnMSec==*pCurMSec)?curReturnMSec+dwInc:*pCurMSec;
}
——————————————在另外一个标准的5.0BSP中
C:\WINCE500\PLATFORM\COMMON\SRC\COMMON\TIMER\COMMON\counts.c(33):UINT32 SC_GetTickCount()
//------------------------------------------------------------------------------
//
//? Function: SC_GetTickCount
//
//? This returns the number of milliseconds that have elapsed since Windows
//? CE was started. If the system timer period is 1ms the function simply
//? returns the value of CurMSec. If the system timer period is greater then
//? 1 ms, the HiRes offset is added to the value of CurMSec.
//
UINT32 SC_GetTickCount()
{
? ? UINT32 count;
? ? INT32 offset;
? ? if (g_oalTimer.actualMSecPerSysTick == 1) {
? ? ? ? // Return CurMSec if the system tick is 1 ms.
? ? ? ? count = CurMSec;
? ? }? else {
? ? ? ? // System timer tick period exceeds 1 ms.
? ? ? ? //
? ? ? ? // This code adjusts the accuracy of the returned value to the nearest
? ? ? ? // MSec when the system tick exceeds 1 ms. The following code checks if
? ? ? ? // a system timer interrupt occurred between reading the CurMSec value
? ? ? ? // and the call to fetch the HiResTicksSinceSysTick. If so, the value of
? ? ? ? // CurMSec and Offset is re-read, with the certainty that a system timer
? ? ? ? // interrupt will not occur again.
? ? ? ? do {
? ? ? ? ? ? count = CurMSec;
? ? ? ? ? ? offset = OALTimerCountsSinceSysTick();
? ? ? ? }
? ? ? ? while (count != CurMSec);
? ? ? ? // Adjust the MSec value with the contribution from HiRes counter.
? ? ? ? count += offset/g_oalTimer.countsPerMSec;
? ? }
? ? return count;
}
在4.2BSP的时候这个sleep会变快,5.0BSP正常。
先看看why先。
看看这两个计算tick count的有何不同,尤其是CPUGetSysTimerCountElapsed和OALTimerCountsSinceSysTick。
Sleep首先是取得tick count,然后加上需要睡眠的毫秒数,得到一个wakeup time,然后将线程放到sleep queue里,首先这样做肯定是不精确的。其次sleep使用了一个循环去检查sleep queue,这又增加了不精确性。
-
第二次启动的时候能找到MBR,并且能找到BINFS分区,请看下面的提示,
IsValidMBR: MBR sector = 0x200 (valid MBR)
OpenPartition: Partition Exists=0x1 for part 0x21.
MBR是写到block 04里面了。
会不会是MBR里面FAT分区的分区表信息有误?