-
举个简答的例子,比方说你发送0x01,二进制为00000001,最低位为1,从最低位开始读取,这一位对应到程序里就是newRXD = 1,然后Output|=0x80(10000000),然后进行下一次循环;之后的newRXD都为0,循环一次Output往右移一位,依次为01000000 00100000 00010000 ......直到最后00000001
WaitTF0();//等过起始位
这个起始位是什么?真要有这个位的话,那1位起始位加8位数据位一共要读取9位,那这个程序最简单的改法就是让i的初始值等于9了吧?试试看对不对吧?
[ 本帖最后由 SuperStar515 于 2011-8-12 01:22 编辑 ]
-
成2倍关系应该是移位部分的问题
//接收8位数据位
while(i--)
{
Output>>=1 ;
if(newRXD)Output|=0x80 ;//先收低位
WaitTF0();//位间延时
}
这里应该先收低位再移位(Output>>=1 ; )吧?
-
你把U0TCTL和TXEPT的定义部分贴出来看看?:funk:
或者你把整个工程发上来?就这几行代码神仙来了也愁啊:lol
-
貌似跟那个帖子的问题一样
在OSTaskDel(OS_PRIO_SELF);或者有任务调度功能的函数之前加上
OSIntNesting=0; //清UCOSII中断标志
OSLockNesting=0; //可不加
试试?
-
在OSTaskDel(OS_PRIO_SELF);之前加上
OSIntNesting=0; //清UCOSII中断标志
OSLockNesting=0; //可不加
应该就没问题了,具体你看下OSTaskDel();这个函数定义就明白了
[ 本帖最后由 SuperStar515 于 2011-8-9 13:38 编辑 ]
-
//调整下顺序试试?
while(!(U0TCTL & TXEPT)); // TX Buffer is empty ?
U0TXBUF =WriteData;// Send the byte
或者
U0TXBUF =WriteData;// Send the byte
while(!(U0TCTL & TXEPT)); // TX Buffer is empty ?
U0TCTL &=~ TXEPT;//加上这个试试?
或者
把上面这个再调整顺序试试?
[ 本帖最后由 SuperStar515 于 2011-8-9 12:58 编辑 ]
-
用for(i=0;i
-
http://www.eetrend.com/forum/100025929
这个应该对你有用的
-
//target.c
void TargetResetInit(void)
{
#ifdef __DEBUG
MEMMAP = 0x3; //remap --->片外?
#endif
#ifdef __OUT_CHIP
MEMMAP = 0x3; //remap --->片外?
#endif
#ifdef __IN_CHIP
MEMMAP = 0x1; //remap
#endif
......
}
问题貌似是出在这里吧?(这个实例程序不大,似乎不需要用到片外RAM或FLASH)
如果运行在片内flash的话MEMMAP就直接设为1,如果运行在片内RAM中的话,就将该寄存器设为2,最后如果是由片外flash启动,需要将该位设置为3,如果该MEMAP设为3,一定要先将GPIO,BCFG设置完后再设置MEMAP寄存器。(如何设置你就自己再百度百度琢磨琢磨吧,我这没有LPC2214的板,感觉LPC2214确实很麻烦)
以下是LPC2300里的一段,你的那段不是很清楚,你对比一下,再试试
void TargetResetInit(void){#ifdef __DEBUG_RAM MEMMAP = 0x2; // remap#endif
#ifdef __DEBUG_FLASH MEMMAP = 0x1; // remap#endif
#ifdef __IN_CHIP MEMMAP = 0x1; // remap#endif
......
}
[ 本帖最后由 SuperStar515 于 2011-7-22 15:13 编辑 ]
-
如果你的延时函数和Timer0无关,那么任何时候都可以用;如果有关,那么应该先初始化Timer0。
-
1、答:
UCOSII的中断服务程序中有必不可少的4个部分:
OSIntEnter(); //(1) 进入中断,OSIntNesting加1,OSIntNesting>0时任务调度被关闭
OSSemPost(Sem); //(2) 发送信号量,使其他任务进入就绪态
清除中断的响应标志 //(3) 清除中断响应标志
OSIntExit(); //(4) 退出中断,OSIntNesting减1,OSIntNesting==0时任务调度才被打开
按照楼主所说,“发现更高优先级任务”的程序应该是在(2)部分,而此时任务调度是关闭的,要想进行 任务切换,至少得等到这个中断结束(至于任务切不切换,怎么切换,看一下OSIntEnter()和OSIntExit() 的相关内容就明白了)。所以在中断中高优先级的任务是不会被执行的。
2、答:
任务要想切换就必须执行一个任务调度函数OS_Sched()(中断另当别论),最典型的就是OSTimeDly()函数里调用了OS_Sched(),所以低优先级任务被高优先级任务剥夺CPU控制权,要等到低优先级任务执行任务调度函数OS_Sched()之后。如果你的程序从头到尾都没调用OS_Sched(),它永远也不会进行任务切换。至于任务怎么切换看看OS_Sched()相关内容就明白了。总之任务切换时,CPU控制权总是被就绪态的任务优先级最高的任务获得。
[ 本帖最后由 SuperStar515 于 2011-7-21 10:19 编辑 ]
-
正在学。。。
-
;P 01.08 繁忙的一天又开始了...
-
OK
-
好啊~~~^_^:D :D
-
加完了又减,乘完了又除,呵呵
-
在一些程序里,用#define进行宏定义的时候,只有宏名,没有宏体,那是代表什么意思呢?
宏名前面定义过或是取消宏体
-
uint bus_reset :1; //总线复位
uint suspend :1; //总线挂起
-
你是不是皮肤越来越白?头发越来越少?
;P ;P ;P 相思病:P
-
:handshake :) :)