发新帖我要提问
12
返回列表
打印

会一些PIC877的试验,下一步?

[复制链接]
楼主: swqswq0321
手机看帖
扫描二维码
随时随地手机跟帖
21
还有这样无耻的人!
能掐会算我跟没用过状态机或者队列!!!
能掐会算我I2C搞不定???

神经有毛病吧?

使用特权

评论回复
22
shizaigaole| | 2010-11-9 20:53 | 只看该作者
还我断章取义?
一方面吵嚷时间不够,
一方面还大量的signal();函数调用。

连C基本的东西都不懂,难怪觉得队列就不得了了!

使用特权

评论回复
23
yewuyi| | 2010-11-9 21:18 | 只看该作者
视角不同决定结论差异,不要打嘴仗了,两个朋友没有根本矛盾,都强调了要重视基础,对于新人这样就够了,一定要和谐。

纯粹的讨论某个人是不是高手,其实一点意义都没有,俺的观点:只要这个人能把他掌握的电子知识和他从事的行业密切、可靠、高质的结合起来,那这个人就是高手,而且是绝顶高手,否则意义不大。

使用特权

评论回复
24
alamo2009| | 2010-11-10 12:57 | 只看该作者
还我断章取义?
一方面吵嚷时间不够,
一方面还大量的signal();函数调用。

连C基本的东西都不懂,难怪觉得队列就不得了了!
shizaigaole 发表于 2010-11-9 20:53


既然这家伙不想淡定,咱们就继续……
把这个帖子搞火
shizaigaole发表于 2010-7-14 16:11 | 只看该作者 回复 引用 订阅 报告 收藏 分享 评分
打印




楼主: STM32 I2C 问题



看看你那些破帖子,全是搞驱动的,能用上队列状态机?
赶紧好好把你的i2c搞定再来叫!就这i2c的问题还是今年7月份的。水货就是水货!

知道那个signal()函数是干嘛的不?你是不是就知道字面意思!
说你水货感觉有点抬举你了!

使用特权

评论回复
25
alamo2009| | 2010-11-10 13:00 | 只看该作者
还有这样无耻的人!
能掐会算我跟没用过状态机或者队列!!!
能掐会算我I2C搞不定???

神经有毛病吧?
shizaigaole 发表于 2010-11-9 20:31


是不是吃屎没把最擦干净?
揭你短你就不高兴了,就开始骂人了!

使用特权

评论回复
26
alamo2009| | 2010-11-10 13:01 | 只看该作者
23# yewuyi

封贴吧!
这帖子很难淡定!

使用特权

评论回复
27
shizaigaole| | 2010-11-10 14:59 | 只看该作者
typedef struct __I2C_SEND_BUF_QUE
{
  u8 buf[3][132]; //前两个字节为数据长度,第三个第四个字节为内存地址
  u8 outPos;
  u8 inPos;
  u8 len;
} I2C_SEND_BUF_QUE;

I2C_SEND_BUF_QUE sendBufQue;

void InitsendBufQue()
  {
    sendBufQue.outPos = 0;
    sendBufQue.inPos = 0;
    sendBufQue.len = 0;
  }

if(sendBufQue.len > 0)  // 缓冲区有待写入的数据
  {
    //。。。。。。
    。。。。写I2C其他代码
   //...................
        //判别本数据帧是否写完成
    lenCount += lenInPage;
    if(lenCount >= AllLen)
    {
      sendBufQue.len--;
      if(++sendBufQue.outPos == 3)
        sendBufQue.outPos = 0;
      lenCount = 0;
      curPage = 0;     //为下一帧做好准备
    }
  }


void WriteParam(unsigned char *pSource, unsigned short startAddr,unsigned short len)
{
  unsigned int i;
  unsigned char *p;
  unsigned short *pTemp;
  
  if(len > 128)//要求一次操作小于128字节
    return;
  
  if(sendBufQue.len == 3)
    return;
  
  p = &sendBufQue.buf[sendBufQue.inPos][0];
  sendBufQue.len++;
  if(++sendBufQue.inPos == 3)
    sendBufQue.inPos = 0;

  pTemp = (unsigned short *)p;
  *pTemp = len;                 // 要写入的数据长度
  pTemp++;
  *pTemp = startAddr;
  
  for(i = 0; i < len; i++)
    *(p+4+i) = *(pSource+i);
}

这是本人最近写的部分程序摘抄,

LS看看我的是不是使用了队列,

阁下也搞个队列代码,看看是不是玩出花

使用特权

评论回复
28
shizaigaole| | 2010-11-10 14:59 | 只看该作者
别光说不练

使用特权

评论回复
29
shizaigaole| | 2010-11-10 15:05 | 只看该作者
IAR_STM32_I2C_DMA2.rar (311.11 KB)

本人写的STM32 的I2C 测试程序,
DMA + I2C + 中断方式
欢迎检测,
看看本人是不是搞不定I2C

使用特权

评论回复
30
shizaigaole| | 2010-11-10 15:10 | 只看该作者
咱就看、好好探讨你的代码:

void signal()
{
RA5=0;
asm("NOP");
asm("NOP");
asm("NOP");
asm("NOP");
asm("NOP");
asm("NOP");
asm("NOP");
asm("NOP");
asm("NOP");
RA5=1;
}

RA5为时钟输出,
先拉低,
9个asm("NOP");期间,
从设备输出数据到数据线上,

然后RA5=1;拉高时钟线,
data1=Rev;
主设备开始读取数据,

对吗??

还有什么高深的地方???

使用特权

评论回复
31
shizaigaole| | 2010-11-10 15:12 | 只看该作者
“知道那个signal()函数是干嘛的不?你是不是就知道字面意思!
说你水货感觉有点抬举你了!”

凭什么说别人都是傻子??
就你懂?

使用特权

评论回复
32
shizaigaole| | 2010-11-10 15:14 | 只看该作者
本帖最后由 shizaigaole 于 2010-11-10 15:17 编辑

void signal()
{
RA5=0;
asm("NOP");
asm("NOP");
asm("NOP");
asm("NOP");
asm("NOP");
asm("NOP");
asm("NOP");
asm("NOP");
asm("NOP");
RA5=1;
}
/******信号采集********/
void Rec_data()
{
unsigned char i;
di();
RA5=1;
for(i=5;i>0;i--);
signal();      //----------1--------------//
data1=Rev;
signal();    //----------2--------------//
data2=Rev;
signal();      //----------3--------------//
data3=Rev;
signal();      //----------4--------------//
data4=Rev;
signal();      //----------5--------------//
data5=Rev;
signal();      //----------6--------------//
data6=Rev;
signal();      //----------7--------------//
data7=Rev;
signal();    //----------8--------------//
data8=Rev;
signal();    //----------9--------------//
data9=Rev;
signal();       //----------10--------------//
data10=Rev;
signal();    //----------11--------------//
data11=Rev;
signal();    //----------12--------------//
data12=Rev;
signal();              //----------13--------------//
data13=Rev;
signal();     //----------14--------------//
data14=Rev;
signal();      //----------15--------------//
data15=Rev;
signal();      //----------16--------------//
data16=Rev;
signal();    //----------17--------------//
data17=Rev;
signal();    //----------18--------------//
data18=Rev;
signal();    //----------19--------------//
data19=Rev;
signal();    //----------20--------------//
data20=Rev;
signal();    //----------21--------------//
data21=Rev;
signal();    //----------22--------------//
data22=Rev;
signal();    //----------23--------------//
data23=Rev;
signal();    //----------24--------------//
data24=Rev;
RA5=0;
// data_H=(data1<<7)+(data2<<6)+(data3<<5)+(data4<<4)+(data5<<3)+(data6<<2)+(data7<<1)+data8;
data_M=(data9<<7)+(data10<<6)+(data11<<5)+(data12<<4)+(data13<<3)+(data14<<2)+(data15<<1)+data16;
data_L=(data17<<7)+(data18<<6)+(data19<<5)+(data20<<4)+(data21<<3)+(data22<<2)+(data23<<1)+data24;
data=((unsigned int)data_M<<8)+data_L;
ei();
}

我说你的代码很烂,
我能写出和你同样功能的要求代码,

比你的简洁很多,

你敢打赌否?

使用特权

评论回复
33
shizaigaole| | 2010-11-10 15:31 | 只看该作者
本帖最后由 shizaigaole 于 2010-11-10 15:33 编辑


你的问题是:1.一方面吵嚷时间不够,一方面还大量的signal();函数调用。这是个基本问题,这点XWJ网页已指出,并且你已经亲口承认:
不需要狡辩了吧?


2.代码很烂

你自己说的:
“写24条语句太麻烦了!”
完全可以有更简洁的方式,实现和你这个代码片段同样的要求。


敢打赌否?

使用特权

评论回复
34
alamo2009| | 2010-11-10 18:03 | 只看该作者
typedef struct __I2C_SEND_BUF_QUE
{
  u8 buf[3][132]; //前两个字节为数据长度,第三个第四个字节为内存地址
  u8 outPos;
  u8 inPos;
  u8 len;
} I2C_SEND_BUF_QUE;

I2C_SEND_BUF_QUE sendBufQue;

void Init ...
shizaigaole 发表于 2010-11-10 14:59


看我说到队列,又不知在哪儿搜了一段,估计自己都不懂,像这种破程序,是个人都能写出来!
结构体内定义这么一个大数组u8 buf[3][132]; 我还是第一次见到,
直接定义一个指针,让他指向一个数组,这样buffer大小可以灵活变动。
抄程序的时候,自己先搞懂,再发上来!免得被人鄙视。

你连硬件是什么都不知道,什么传感器都不懂,你还打赌!水货都是不是都像你这样子!
程序不一定美观你就能实现功能。
我做了这么一个程序,是试了好多方法的!之所以在网上询问,看还有没有我没试过的方法!!!

跟水货说话就是累!简直就是对牛弹琴!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则