-
嗯,我也在弄STM8,过几天再测试。
-
while(1) // 这个循环 是乐曲的播放吗? 怎么看不懂啊 ???{
for (;;i++)
{
复制代码
这是条件始终成立的意思,而里面没有结束语句,死循环了。
-
我之前写的是带返回值的,但是现在又个问题,我在写模式寄存器之后写校准参数的时候,等待Rdy拉低的时候,在这个地方死循环了,也就是说,校准没成功,偶尔这个地方有可以成功,这是什么原因呢?
-
引用 4 楼 ffeige1984 的回复:
引用 1 楼 winamp123 的回复:
不是,NANDFLASH不是NORFLASH,不占用BANK编址,必须由NAND控制器控制。
2440有专门的NAND FLASH控制器,看下用户手册
恩
-
没有太大区别,都是骗钱为主,
公司买的话,就每套都买回来比较一下在学了,hoho
如果自己为了兴趣而学,那就自己找资料,自己做pcb吧,能学到不少东西
-
WinCE 5.0 VirtualAlloc VirtualCopy
WinCE 6.0 VirtualAllocEx VirtualCopyEx
-
STC89C52RC老是会跑漏部分代码,不知道为什么.
编译出来的结果是这样:
Program Size: data=99.7 xdata=0 code=7961
-
/*结合上面的初始化程序,就是这个FRAM的驱动,希望对你有帮助*/
#define WREN_CMD 0x06
#define WRDI_CMD 0x04
#define WRSR_CMD 0x01
#define RDSR_CMD 0x05
#define WRITE_CMD 0x02
#define READ_CMD 0x03
//读或写一个直接
//返回读写是否成功标记。 1失败,0成功。
UCHAR SPI_ReadWriteByte(UCHAR TxData,UCHAR *RxData)
{
USHORT cw=0,cr=0;
//等待发送缓冲区空
while(SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE) == RESET)
{
if(++cw > 60000)return 1;
}
//发一个字节
SPI_I2S_SendData(SPI2, TxData);
//等待数据接收
while(SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_RXNE) == RESET)
{
if(++cr > 60000)return 1;
}
//取数据
*RxData = SPI_I2S_ReceiveData(SPI2);
return 0;
}
//SPI写一个字节
void SPIWriteByte(UCHAR nByte)
{
UCHAR rd;
SPI_ReadWriteByte(nByte,&rd);
}
//SPI读一个字节
UCHAR SPIReadByte(void)
{
UCHAR data;
SPI_ReadWriteByte(0xA5,&data); //0xA5是dummy data
return data;
}
/*-----------------------------------------------------------*/
/*
* 函数:
*
* 入口:
*
* 出口:
*
* 说明: 写FRAM函数
*
* 创建:
*
*/
//写一个字节到FRAM
void FMWriteOne(USHORT nFMAddr,UCHAR nFMData)
{
FM_CS_0;
SPIWriteByte(WREN_CMD);
FM_CS_1;
DelayNOP(10);
FM_CS_0;
SPIWriteByte(WRITE_CMD);
SPIWriteByte((UCHAR)(nFMAddr>>8));
SPIWriteByte((UCHAR)(nFMAddr&0x00ff));
SPIWriteByte(nFMData);
FM_CS_1;
}
//连续写N个字节到FRAM
UCHAR FMWriteSerial(USHORT nFMAddr,USHORT nFMNum,UCHAR *nFMData)
{
USHORT i;
UCHAR xor; //写的同时进行异或
xor = 0;
FM_CS_0;
SPIWriteByte(WREN_CMD);
FM_CS_1;
Delayms(3);
FM_CS_0;
SPIWriteByte(WRITE_CMD);
SPIWriteByte((UCHAR)(nFMAddr>>8));
SPIWriteByte((UCHAR)(nFMAddr&0x00ff));
for(i=0;i<nFMNum;i++)
{
SPIWriteByte(*nFMData);
xor = xor ^ (*nFMData);
nFMData++;
}
FM_CS_1;
return xor;
}
/*-----------------------------------------------------------*/
/*
* 函数:
*
* 入口:
*
* 出口:
*
* 说明: 读FRAM函数
*
* 创建:
*
*/
//从FRAM里读出一个字节
UCHAR FMReadOne(USHORT nFMAddr)
{
UCHAR nData;
FM_CS_0;
SPIWriteByte(READ_CMD);
SPIWriteByte((UCHAR)(nFMAddr>>8));
SPIWriteByte((UCHAR)(nFMAddr&0x00ff));
nData = SPIReadByte();
FM_CS_1;
return nData;
}
//从FRAM里连续读出N个字节
UCHAR FMReadSerial(USHORT nFMAddr,USHORT nFMNum,UCHAR *nFMData)
{
USHORT i;
UCHAR xor;
xor = 0;
FM_CS_0;
SPIWriteByte(READ_CMD);
SPIWriteByte((UCHAR)(nFMAddr>>8));
SPIWriteByte((UCHAR)(nFMAddr&0x00ff));
for(i=0;i<nFMNum;i++)
{
*nFMData = SPIReadByte();
xor = xor ^ *nFMData;
nFMData++;
}
FM_CS_1;
return xor;
}
//从FRAM读出数据后校验
UCHAR FMCheck(USHORT nFMAddr,USHORT nFMNum)
{
USHORT i;
UCHAR xor,data;
xor=0;
FM_CS_0;
SPIWriteByte(READ_CMD);
SPIWriteByte((UCHAR)(nFMAddr>>8));
SPIWriteByte((UCHAR)(nFMAddr&0x00ff));
for(i=0;i<nFMNum;i++)
{
data = SPIReadByte();
xor = xor ^ data;
}
FM_CS_1;
return xor;
}
/*-----------------------------------------------------------*/
/*
* 函数:
*
* 入口:
*
* 出口:
*
* 说明: 读FRAM状态
*
* 创建:
*
*/
UCHAR FMReadStatus(void)
{
UCHAR nStatus;
FM_CS_0;
SPIWriteByte(RDSR_CMD);
nStatus = SPIReadByte();
FM_CS_1;
return nStatus;
}
/*-----------------------------------------------------------*/
/*
* 函数:
*
* 入口:
*
* 出口:
*
* 说明: 写FRAM状态
*
* 创建:
*
*/
void FMWriteStatus(UCHAR nStatus)
{
FM_CS_0;
SPIWriteByte(WREN_CMD);
FM_CS_1;
DelayNOP(10);
FM_CS_0;
SPIWriteByte(WRSR_CMD);
SPIWriteByte(nStatus);
FM_CS_1;
}
-
先关闭看门狗,设置,再启动看门狗
我不用三星的芯片,也不太清楚你是怎么个流程
或许我说废话了
-
我把TCPsocket的缓冲设回默认的8192字节,输入80Mbps码率数据,已经跑了两个小时,目前正常。CPU空闲50%左右。
起初设的是250*1024字节,跑不到一分钟TCPsend就阻塞了,UDP接收正常。
缓冲区检查过了,加了保护应该没有问题。
没有加其他处理任务。
调两个任务的优先级没有改善。
-
是偶尔现象,STC是用另外一根USB线供电的
-
引用 3 楼 great_bug 的回复:
双极型三极管(BJT)的放大是基于扩散的机理.....在PN结的两边,自由的载流子扩散到对面会被束缚住,形成耗尽区,并且N区域带上正电荷,P区域带上负电荷,形成电场,这个电场的强度取决于材料的能带.
在没有外部电压的时候,这个电场正好能阻止自由载流子继续越过PN结...越过PN结的扩散运动过程被这个电场阻止了.
如果给PN结加上和它形成的电场相同方向的电压(P接负,N接正),则会促使更多的自由载流子处于束缚状态,耗尽层的厚度增加,PN结阻止电流形成.
如果加上相反的电压(P正,N负),在外部电场的作用下,被束缚于PN结两侧的载流子将脱离束缚流向外部电路,载流子会继续扩散越过PN结,形成电流.
三极管的特点是,基区厚度很小. 在其放大状态,B-E处于正向导通状态,E区的载流子扩散进入B区,一部分会从基极流向外部电路,形成基极电流,另外一部分则会扩散进入C区.C-B结的电场会阻止B区来的载流子扩散进入C区,但不会阻止E区来的载流子. 由于基区厚度很小,从E区过来的载流子大部分扩散到C区,形成集电极电流.....这就是三极管能够进行电流放大的原理.
正解
-
PB/VS05/08 C/C++
-
没用过,不过应该可以吧
-
没区别,不仿真的时候程序跑的快些,你这个问题有点奇怪
-
没看到附件。。。
-
来个人回复一下,给20分。。。
-
一般来说,这个要配合驱动来实现。
你可以了解一下 WINCE 操作系统的驱动部分。
-
你要看看在你的EBOOT中是否还有这些类似的地址或地址长度的定义,好好查查你的EBOOT程序,
-
谢谢,就jennyvenus的程序问两个问题,首先:
//串口接收中断函数
void serial () interrupt 4 using 3
{
EA = 0;
if (RI)
{
RI = 0 ;
buf[ rp++ ] = SBUF;
rp &= 0x0f;
}
EA = 1;
}
1.EA是全局中断使能开关标志,EA的置零与置1是否为了在接收阶段屏蔽发送,待接收完再开启发送?这是必须的吗?
2,循环缓冲区这个概念我第一次接触,依程序看
buf[ rp++ ] = SBUF;
rp &= 0x0f;
等同于:
for(rp=0;rp