打印
[STM8]

STM8指令执行时间的问题, 难道真的就没一个人知道内幕吗?

[复制链接]
10375|29
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 大王123 于 2011-4-21 18:05 编辑

#define   TXD2      PE.ODR.B2
#define   Tx_DELAY  ;//{nop(); nop();}
void UartSendData_IO_0 ( unsigned char DATA )
{
        unsigned char b0,b1,b2,b3,  b4,b5,b6,b7,st=0,nd=1;
        b0 = DATA &1;  DATA = DATA>>1;
        b1 = DATA &1;  DATA = DATA>>1;
        b2 = DATA &1;  DATA = DATA>>1;
        b3 = DATA &1;  DATA = DATA>>1;
        b4 = DATA &1;  DATA = DATA>>1;
        b5 = DATA &1;  DATA = DATA>>1;
        b6 = DATA &1;  DATA = DATA>>1;
        b7 = DATA &1;
        //------------------------------------
         TXD2=st;   //start
         TXD2=b0;
         TXD2=b1;
         TXD2=b2;
         TXD2=b3;
         TXD2=b4;
         TXD2=b5;
         TXD2=b6;
         TXD2=b7;
         TXD2=nd;   //stop
}

void UartSendData_IO_1 ( unsigned char DATA )
{
        unsigned char b0,b1,b2,b3,  b4,b5,b6,b7,st=0,nd=1;
        b0 = DATA &1;  DATA = DATA>>1;
        b1 = DATA &1;  DATA = DATA>>1;
        b2 = DATA &1;  DATA = DATA>>1;
        b3 = DATA &1;  DATA = DATA>>1;
        b4 = DATA &1;  DATA = DATA>>1;
        b5 = DATA &1;  DATA = DATA>>1;
        b6 = DATA &1;  DATA = DATA>>1;
        b7 = DATA &1;  nop();
        //------------------------------------
         TXD2=st;   //start
         TXD2=b0;
         TXD2=b1;
         TXD2=b2;
         TXD2=b3;
         TXD2=b4;
         TXD2=b5;
         TXD2=b6;
         TXD2=b7;
         TXD2=nd;   //stop
}

void UartSendData_IO_2 ( unsigned char DATA )
{
        unsigned char b0,b1,b2,b3,  b4,b5,b6,b7,st=0,nd=1;
        b0 = DATA &1;  DATA = DATA>>1;
        b1 = DATA &1;  DATA = DATA>>1;
        b2 = DATA &1;  DATA = DATA>>1;
        b3 = DATA &1;  DATA = DATA>>1;
        b4 = DATA &1;  DATA = DATA>>1;
        b5 = DATA &1;  DATA = DATA>>1;
        b6 = DATA &1;  DATA = DATA>>1;
        b7 = DATA &1;  nop(); nop();
        //------------------------------------
         TXD2=st;   //start
         TXD2=b0;
         TXD2=b1;
         TXD2=b2;
         TXD2=b3;
         TXD2=b4;
         TXD2=b5;
         TXD2=b6;
         TXD2=b7;
         TXD2=nd;   //stop
}

void UartSendData_IO_3 ( unsigned char DATA )
{
        unsigned char b0,b1,b2,b3,  b4,b5,b6,b7,st=0,nd=1;
        b0 = DATA &1;  DATA = DATA>>1;
        b1 = DATA &1;  DATA = DATA>>1;
        b2 = DATA &1;  DATA = DATA>>1;
        b3 = DATA &1;  DATA = DATA>>1;
        b4 = DATA &1;  DATA = DATA>>1;
        b5 = DATA &1;  DATA = DATA>>1;
        b6 = DATA &1;  DATA = DATA>>1;
        b7 = DATA &1;  nop();nop();nop();
        //------------------------------------
         TXD2=st;   //start
         TXD2=b0;
         TXD2=b1;
         TXD2=b2;
         TXD2=b3;
         TXD2=b4;
         TXD2=b5;
         TXD2=b6;
         TXD2=b7;
         TXD2=nd;   //stop
}

void main(void)
{
          unsigned int k,len,jj;
          unsigned char i=0,tmp;
          PortCfgInit();
          Main_ClockCfg();

               
                while(1)
                {
                        UartSendData_IO_0(0x55);
                        UartSendData_IO_1(0x55);
                        UartSendData_IO_2(0x55);
                        UartSendData_IO_3(0x55);
                        Delay_Nus(50000);
                }
        }


得到以下4个不同的波形,(不是仿真的,而是实际用逻辑分析仪抓到的),这不知道怎么解释????
但是可以看出指令执行时间和它所在地址有一定关系。



如需交流:q:363317826      mal:363317826@qq.com
沙发
CC2530| | 2011-4-21 17:41 | 只看该作者
本帖最后由 CC2530 于 2011-4-21 17:47 编辑
#define   TXD2      PE.ODR.B2
但是可是看出指令执行时间和它所在地址有一定关系。
大王123 发表于 2011-4-21 17:27


早就发现STM8 指令执行时间与对齐有关。

但具体什么关系,没有深入研究。
估计是某些指令,横跨两个对齐的四字节,会多执行一个周期。

使用特权

评论回复
板凳
大王123|  楼主 | 2011-4-21 17:45 | 只看该作者
本帖最后由 大王123 于 2011-4-21 17:47 编辑

是的, 就是和对齐有关,那到底是怎么相关的, 需要高手解释????

使用特权

评论回复
地板
風神| | 2011-4-21 17:48 | 只看该作者
不解。帮顶。呼叫香主。

使用特权

评论回复
5
大王123|  楼主 | 2011-4-21 18:01 | 只看该作者
早就发现STM8 指令执行时间与对齐有关。

但具体什么关系,没有深入研究。
估计是某些指令,横跨两个对齐的四字节,会多执行一个周期。
CC2530 发表于 2011-4-21 17:41



有时还多出两个周期.....

使用特权

评论回复
6
sinadz| | 2011-4-21 18:35 | 只看该作者
什么内幕?

使用特权

评论回复
7
風神| | 2011-4-21 19:15 | 只看该作者
STM8的执行时间是不是跟对齐有关?

使用特权

评论回复
8
sdpz| | 2011-4-21 19:24 | 只看该作者
先把汇编代码秀出来再来说明吧

使用特权

评论回复
9
dfsa| | 2011-4-21 21:58 | 只看该作者
没看太明白

使用特权

评论回复
10
大王123|  楼主 | 2011-4-22 09:20 | 只看该作者
482                     ; 31 void UartSendData_IO_0 ( unsigned char DATA )
482                     ; 32 {
483                             scross        off
484                             switch        .text
485  0000               _UartSendData_IO_0:
486  0000 88                    push        a
487  0001 520a                  subw        sp,#10
488       0000000a      OFST:        set        10
490                     ; 33         unsigned char b0,b1,b2,b3,  b4,b5,b6,b7,st=0,nd=1;
491  0003 7b01                  ld        a,(OFST-9,sp)
492  0005 97                    ld        xl,a
494  0006 7b02                  ld        a,(OFST-8,sp)
495  0008 97                    ld        xl,a
496                     ; 34         b0 = DATA &1;  DATA = DATA>>1;
497  0009 7b0b                  ld        a,(OFST+1,sp)
498  000b a401                  and        a,#1
499  000d 6b03                  ld        (OFST-7,sp),a
501  000f 040b                  srl        (OFST+1,sp)
502                     ; 35         b1 = DATA &1;  DATA = DATA>>1;
503  0011 7b0b                  ld        a,(OFST+1,sp)
504  0013 a401                  and        a,#1
505  0015 6b04                  ld        (OFST-6,sp),a
507  0017 040b                  srl        (OFST+1,sp)
508                     ; 36         b2 = DATA &1;  DATA = DATA>>1;
509  0019 7b0b                  ld        a,(OFST+1,sp)
510  001b a401                  and        a,#1
511  001d 6b05                  ld        (OFST-5,sp),a
513  001f 040b                  srl        (OFST+1,sp)
514                     ; 37         b3 = DATA &1;  DATA = DATA>>1;
515  0021 7b0b                  ld        a,(OFST+1,sp)
516  0023 a401                  and        a,#1
517  0025 6b06                  ld        (OFST-4,sp),a
519  0027 040b                  srl        (OFST+1,sp)
520                     ; 38         b4 = DATA &1;  DATA = DATA>>1;
521  0029 7b0b                  ld        a,(OFST+1,sp)
522  002b a401                  and        a,#1
523  002d 6b07                  ld        (OFST-3,sp),a
525  002f 040b                  srl        (OFST+1,sp)
526                     ; 39         b5 = DATA &1;  DATA = DATA>>1;
527  0031 7b0b                  ld        a,(OFST+1,sp)
528  0033 a401                  and        a,#1
529  0035 6b08                  ld        (OFST-2,sp),a
531  0037 040b                  srl        (OFST+1,sp)
532                     ; 40         b6 = DATA &1;  DATA = DATA>>1;
533  0039 7b0b                  ld        a,(OFST+1,sp)
534  003b a401                  and        a,#1
535  003d 6b09                  ld        (OFST-1,sp),a
537  003f 040b                  srl        (OFST+1,sp)
538                     ; 41         b7 = DATA &1;
539  0041 7b0b                  ld        a,(OFST+1,sp)
540  0043 a401                  and        a,#1
541  0045 6b0a                  ld        (OFST+0,sp),a
542                     ; 43          TXD2=st;   //start
543  0047 72155014              bres        _PE,#2
544                     ; 44          TXD2=b0;
545  004b 7b03                  ld        a,(OFST-7,sp)
546  004d 44                    srl        a
547  004e 90155014              bccm        _PE,#2
548                     ; 45          TXD2=b1;
549  0052 7b04                  ld        a,(OFST-6,sp)
550  0054 44                    srl        a
551  0055 90155014              bccm        _PE,#2
552                     ; 46          TXD2=b2;
553  0059 7b05                  ld        a,(OFST-5,sp)
554  005b 44                    srl        a
555  005c 90155014              bccm        _PE,#2
556                     ; 47          TXD2=b3;
557  0060 7b06                  ld        a,(OFST-4,sp)
558  0062 44                    srl        a
559  0063 90155014              bccm        _PE,#2
560                     ; 48          TXD2=b4;
561  0067 7b07                  ld        a,(OFST-3,sp)
562  0069 44                    srl        a
563  006a 90155014              bccm        _PE,#2
564                     ; 49          TXD2=b5;
565  006e 7b08                  ld        a,(OFST-2,sp)
566  0070 44                    srl        a
567  0071 90155014              bccm        _PE,#2
568                     ; 50          TXD2=b6;
569  0075 7b09                  ld        a,(OFST-1,sp)
570  0077 44                    srl        a
571  0078 90155014              bccm        _PE,#2
572                     ; 51          TXD2=b7;
573  007c 7b0a                  ld        a,(OFST+0,sp)
574  007e 44                    srl        a
575  007f 90155014              bccm        _PE,#2
576                     ; 52          TXD2=nd;   //stop
577  0083 72145014              bset        _PE,#2
578                     ; 53  }
579  0087 5b0b                  addw        sp,#11
580  0089 81                    ret
582                     ; 55 void UartSendData_IO_1 ( unsigned char DATA )
582                     ; 56 {
583  008a               _UartSendData_IO_1:
584  008a 88                    push        a
585  008b 520a                  subw        sp,#10
586       0000000a      OFST:        set        10
588                     ; 57         unsigned char b0,b1,b2,b3,  b4,b5,b6,b7,st=0,nd=1;
589  008d 0f01                  clr        (OFST-9,sp)
591  008f a601                  ld        a,#1
592  0091 6b02                  ld        (OFST-8,sp),a
593                     ; 58         b0 = DATA &1;  DATA = DATA>>1;
594  0093 7b0b                  ld        a,(OFST+1,sp)
595  0095 a401                  and        a,#1
596  0097 6b03                  ld        (OFST-7,sp),a
598  0099 040b                  srl        (OFST+1,sp)
599                     ; 59         b1 = DATA &1;  DATA = DATA>>1;
600  009b 7b0b                  ld        a,(OFST+1,sp)
601  009d a401                  and        a,#1
602  009f 6b04                  ld        (OFST-6,sp),a
604  00a1 040b                  srl        (OFST+1,sp)
605                     ; 60         b2 = DATA &1;  DATA = DATA>>1;
606  00a3 7b0b                  ld        a,(OFST+1,sp)
607  00a5 a401                  and        a,#1
608  00a7 6b05                  ld        (OFST-5,sp),a
610  00a9 040b                  srl        (OFST+1,sp)
611                     ; 61         b3 = DATA &1;  DATA = DATA>>1;
612  00ab 7b0b                  ld        a,(OFST+1,sp)
613  00ad a401                  and        a,#1
614  00af 6b06                  ld        (OFST-4,sp),a
616  00b1 040b                  srl        (OFST+1,sp)
617                     ; 62         b4 = DATA &1;  DATA = DATA>>1;
618  00b3 7b0b                  ld        a,(OFST+1,sp)
619  00b5 a401                  and        a,#1
620  00b7 6b07                  ld        (OFST-3,sp),a
622  00b9 040b                  srl        (OFST+1,sp)
623                     ; 63         b5 = DATA &1;  DATA = DATA>>1;
624  00bb 7b0b                  ld        a,(OFST+1,sp)
625  00bd a401                  and        a,#1
626  00bf 6b08                  ld        (OFST-2,sp),a
628  00c1 040b                  srl        (OFST+1,sp)
629                     ; 64         b6 = DATA &1;  DATA = DATA>>1;
630  00c3 7b0b                  ld        a,(OFST+1,sp)
631  00c5 a401                  and        a,#1
632  00c7 6b09                  ld        (OFST-1,sp),a
634  00c9 040b                  srl        (OFST+1,sp)
635                     ; 65         b7 = DATA &1;  nop();
636  00cb 7b0b                  ld        a,(OFST+1,sp)
637  00cd a401                  and        a,#1
638  00cf 6b0a                  ld        (OFST+0,sp),a
641  00d1 9d            nop
643                     ; 67          TXD2=st;   //start
644  00d2 7b01                  ld        a,(OFST-9,sp)
645  00d4 44                    srl        a
646  00d5 90155014              bccm        _PE,#2
647                     ; 68          TXD2=b0;
648  00d9 7b03                  ld        a,(OFST-7,sp)
649  00db 44                    srl        a
650  00dc 90155014              bccm        _PE,#2
651                     ; 69          TXD2=b1;
652  00e0 7b04                  ld        a,(OFST-6,sp)
653  00e2 44                    srl        a
654  00e3 90155014              bccm        _PE,#2
655                     ; 70          TXD2=b2;
656  00e7 7b05                  ld        a,(OFST-5,sp)
657  00e9 44                    srl        a
658  00ea 90155014              bccm        _PE,#2
659                     ; 71          TXD2=b3;
660  00ee 7b06                  ld        a,(OFST-4,sp)
661  00f0 44                    srl        a
662  00f1 90155014              bccm        _PE,#2
663                     ; 72          TXD2=b4;
664  00f5 7b07                  ld        a,(OFST-3,sp)
665  00f7 44                    srl        a
666  00f8 90155014              bccm        _PE,#2
667                     ; 73          TXD2=b5;
668  00fc 7b08                  ld        a,(OFST-2,sp)
669  00fe 44                    srl        a
670  00ff 90155014              bccm        _PE,#2
671                     ; 74          TXD2=b6;
672  0103 7b09                  ld        a,(OFST-1,sp)
673  0105 44                    srl        a
674  0106 90155014              bccm        _PE,#2
675                     ; 75          TXD2=b7;
676  010a 7b0a                  ld        a,(OFST+0,sp)
677  010c 44                    srl        a
678  010d 90155014              bccm        _PE,#2
679                     ; 76          TXD2=nd;   //stop
680  0111 7b02                  ld        a,(OFST-8,sp)
681  0113 44                    srl        a
682  0114 90155014              bccm        _PE,#2
683                     ; 77  }
684  0118 5b0b                  addw        sp,#11
685  011a 81                    ret
687                     ; 79 void UartSendData_IO_2 ( unsigned char DATA )
687                     ; 80 {
688  011b               _UartSendData_IO_2:
689  011b 88                    push        a
690  011c 520a                  subw        sp,#10
691       0000000a      OFST:        set        10
693                     ; 81         unsigned char b0,b1,b2,b3,  b4,b5,b6,b7,st=0,nd=1;
694  011e 0f01                  clr        (OFST-9,sp)
696  0120 a601                  ld        a,#1
697  0122 6b02                  ld        (OFST-8,sp),a
698                     ; 82         b0 = DATA &1;  DATA = DATA>>1;
699  0124 7b0b                  ld        a,(OFST+1,sp)
700  0126 a401                  and        a,#1
701  0128 6b03                  ld        (OFST-7,sp),a
703  012a 040b                  srl        (OFST+1,sp)
704                     ; 83         b1 = DATA &1;  DATA = DATA>>1;
705  012c 7b0b                  ld        a,(OFST+1,sp)
706  012e a401                  and        a,#1
707  0130 6b04                  ld        (OFST-6,sp),a
709  0132 040b                  srl        (OFST+1,sp)
710                     ; 84         b2 = DATA &1;  DATA = DATA>>1;
711  0134 7b0b                  ld        a,(OFST+1,sp)
712  0136 a401                  and        a,#1
713  0138 6b05                  ld        (OFST-5,sp),a
715  013a 040b                  srl        (OFST+1,sp)
716                     ; 85         b3 = DATA &1;  DATA = DATA>>1;
717  013c 7b0b                  ld        a,(OFST+1,sp)
718  013e a401                  and        a,#1
719  0140 6b06                  ld        (OFST-4,sp),a
721  0142 040b                  srl        (OFST+1,sp)
722                     ; 86         b4 = DATA &1;  DATA = DATA>>1;
723  0144 7b0b                  ld        a,(OFST+1,sp)
724  0146 a401                  and        a,#1
725  0148 6b07                  ld        (OFST-3,sp),a
727  014a 040b                  srl        (OFST+1,sp)
728                     ; 87         b5 = DATA &1;  DATA = DATA>>1;
729  014c 7b0b                  ld        a,(OFST+1,sp)
730  014e a401                  and        a,#1
731  0150 6b08                  ld        (OFST-2,sp),a
733  0152 040b                  srl        (OFST+1,sp)
734                     ; 88         b6 = DATA &1;  DATA = DATA>>1;
735  0154 7b0b                  ld        a,(OFST+1,sp)
736  0156 a401                  and        a,#1
737  0158 6b09                  ld        (OFST-1,sp),a
739  015a 040b                  srl        (OFST+1,sp)
740                     ; 89         b7 = DATA &1;  nop(); nop();
741  015c 7b0b                  ld        a,(OFST+1,sp)
742  015e a401                  and        a,#1
743  0160 6b0a                  ld        (OFST+0,sp),a
746  0162 9d            nop
750  0163 9d            nop
752                     ; 91          TXD2=st;   //start
753  0164 7b01                  ld        a,(OFST-9,sp)
754  0166 44                    srl        a
755  0167 90155014              bccm        _PE,#2
756                     ; 92          TXD2=b0;
757  016b 7b03                  ld        a,(OFST-7,sp)
758  016d 44                    srl        a
759  016e 90155014              bccm        _PE,#2
760                     ; 93          TXD2=b1;
761  0172 7b04                  ld        a,(OFST-6,sp)
762  0174 44                    srl        a
763  0175 90155014              bccm        _PE,#2
764                     ; 94          TXD2=b2;
765  0179 7b05                  ld        a,(OFST-5,sp)
766  017b 44                    srl        a
767  017c 90155014              bccm        _PE,#2
768                     ; 95          TXD2=b3;
769  0180 7b06                  ld        a,(OFST-4,sp)
770  0182 44                    srl        a
771  0183 90155014              bccm        _PE,#2
772                     ; 96          TXD2=b4;
773  0187 7b07                  ld        a,(OFST-3,sp)
774  0189 44                    srl        a
775  018a 90155014              bccm        _PE,#2
776                     ; 97          TXD2=b5;
777  018e 7b08                  ld        a,(OFST-2,sp)
778  0190 44                    srl        a
779  0191 90155014              bccm        _PE,#2
780                     ; 98          TXD2=b6;
781  0195 7b09                  ld        a,(OFST-1,sp)
782  0197 44                    srl        a
783  0198 90155014              bccm        _PE,#2
784                     ; 99          TXD2=b7;
785  019c 7b0a                  ld        a,(OFST+0,sp)
786  019e 44                    srl        a
787  019f 90155014              bccm        _PE,#2
788                     ; 100          TXD2=nd;   //stop
789  01a3 7b02                  ld        a,(OFST-8,sp)
790  01a5 44                    srl        a
791  01a6 90155014              bccm        _PE,#2
792                     ; 101  }
793  01aa 5b0b                  addw        sp,#11
794  01ac 81                    ret
796                     ; 103 void UartSendData_IO_3 ( unsigned char DATA )
796                     ; 104 {
797  01ad               _UartSendData_IO_3:
798  01ad 88                    push        a
799  01ae 520a                  subw        sp,#10
800       0000000a      OFST:        set        10
802                     ; 105         unsigned char b0,b1,b2,b3,  b4,b5,b6,b7,st=0,nd=1;
803  01b0 0f01                  clr        (OFST-9,sp)
805  01b2 a601                  ld        a,#1
806  01b4 6b02                  ld        (OFST-8,sp),a
807                     ; 106         b0 = DATA &1;  DATA = DATA>>1;
808  01b6 7b0b                  ld        a,(OFST+1,sp)
809  01b8 a401                  and        a,#1
810  01ba 6b03                  ld        (OFST-7,sp),a
812  01bc 040b                  srl        (OFST+1,sp)
813                     ; 107         b1 = DATA &1;  DATA = DATA>>1;
814  01be 7b0b                  ld        a,(OFST+1,sp)
815  01c0 a401                  and        a,#1
816  01c2 6b04                  ld        (OFST-6,sp),a
818  01c4 040b                  srl        (OFST+1,sp)
819                     ; 108         b2 = DATA &1;  DATA = DATA>>1;
820  01c6 7b0b                  ld        a,(OFST+1,sp)
821  01c8 a401                  and        a,#1
822  01ca 6b05                  ld        (OFST-5,sp),a
824  01cc 040b                  srl        (OFST+1,sp)
825                     ; 109         b3 = DATA &1;  DATA = DATA>>1;
826  01ce 7b0b                  ld        a,(OFST+1,sp)
827  01d0 a401                  and        a,#1
828  01d2 6b06                  ld        (OFST-4,sp),a
830  01d4 040b                  srl        (OFST+1,sp)
831                     ; 110         b4 = DATA &1;  DATA = DATA>>1;
832  01d6 7b0b                  ld        a,(OFST+1,sp)
833  01d8 a401                  and        a,#1
834  01da 6b07                  ld        (OFST-3,sp),a
836  01dc 040b                  srl        (OFST+1,sp)
837                     ; 111         b5 = DATA &1;  DATA = DATA>>1;
838  01de 7b0b                  ld        a,(OFST+1,sp)
839  01e0 a401                  and        a,#1
840  01e2 6b08                  ld        (OFST-2,sp),a
842  01e4 040b                  srl        (OFST+1,sp)
843                     ; 112         b6 = DATA &1;  DATA = DATA>>1;
844  01e6 7b0b                  ld        a,(OFST+1,sp)
845  01e8 a401                  and        a,#1
846  01ea 6b09                  ld        (OFST-1,sp),a
848  01ec 040b                  srl        (OFST+1,sp)
849                     ; 113         b7 = DATA &1;  nop();nop();nop();
850  01ee 7b0b                  ld        a,(OFST+1,sp)
851  01f0 a401                  and        a,#1
852  01f2 6b0a                  ld        (OFST+0,sp),a
855  01f4 9d            nop
859  01f5 9d            nop
863  01f6 9d            nop
865                     ; 115          TXD2=st;   //start
866  01f7 7b01                  ld        a,(OFST-9,sp)
867  01f9 44                    srl        a
868  01fa 90155014              bccm        _PE,#2
869                     ; 116          TXD2=b0;
870  01fe 7b03                  ld        a,(OFST-7,sp)
871  0200 44                    srl        a
872  0201 90155014              bccm        _PE,#2
873                     ; 117          TXD2=b1;
874  0205 7b04                  ld        a,(OFST-6,sp)
875  0207 44                    srl        a
876  0208 90155014              bccm        _PE,#2
877                     ; 118          TXD2=b2;
878  020c 7b05                  ld        a,(OFST-5,sp)
879  020e 44                    srl        a
880  020f 90155014              bccm        _PE,#2
881                     ; 119          TXD2=b3;
882  0213 7b06                  ld        a,(OFST-4,sp)
883  0215 44                    srl        a
884  0216 90155014              bccm        _PE,#2
885                     ; 120          TXD2=b4;
886  021a 7b07                  ld        a,(OFST-3,sp)
887  021c 44                    srl        a
888  021d 90155014              bccm        _PE,#2
889                     ; 121          TXD2=b5;
890  0221 7b08                  ld        a,(OFST-2,sp)
891  0223 44                    srl        a
892  0224 90155014              bccm        _PE,#2
893                     ; 122          TXD2=b6;
894  0228 7b09                  ld        a,(OFST-1,sp)
895  022a 44                    srl        a
896  022b 90155014              bccm        _PE,#2
897                     ; 123          TXD2=b7;
898  022f 7b0a                  ld        a,(OFST+0,sp)
899  0231 44                    srl        a
900  0232 90155014              bccm        _PE,#2
901                     ; 124          TXD2=nd;   //stop
902  0236 7b02                  ld        a,(OFST-8,sp)
903  0238 44                    srl        a
904  0239 90155014              bccm        _PE,#2
905                     ; 125  }
906  023d 5b0b                  addw        sp,#11
907  023f 81                    ret
909                     ; 132 void main(void)

使用特权

评论回复
11
香水城| | 2011-4-22 10:04 | 只看该作者
STM8的指令手册中有每条指令的执行时间,你可以自己对照看看,另外不要忘了把流水线因素考虑进去。

使用特权

评论回复
12
香水城| | 2011-4-22 10:10 | 只看该作者

使用特权

评论回复
13
大王123|  楼主 | 2011-4-22 13:09 | 只看该作者
11# 香水城



我已经对比过了,时间就是不对,只能得出一个结论,就是和指令所在地址有关,也可以说是和对齐有关。 对天流水线嘛:
    第一: 程序中没有涉及到跳转,所以不用考虑.
    第二, 如果非要考虑的话,那么对于这4个函数的影响应该是一样的啊.因为与波形有关的代码都是一样的.

使用特权

评论回复
14
大王123|  楼主 | 2011-4-22 13:11 | 只看该作者
还有上面个 STM8 CPU programming manual  的文档,我早就研究过了...

使用特权

评论回复
15
caner_hn| | 2011-4-22 13:59 | 只看该作者
以下纯属猜测:
真要做这样的程序的话用带流水线的单片机就是一个错误.
你程序不跳转不代表LOAD数据时不跳转
最好在各个数据位间加个比较大的延迟.
      void DelayTx(void)
         {
               int i=0;
               while(i<200) i++;
          }
         TXD2=st;   //start
         DelayTx();
         TXD2=b0;
         DelayTx();
         TXD2=b1;
         DelayTx();
         TXD2=b2;
         DelayTx();
         TXD2=b3;
         DelayTx();
         TXD2=b4;
         DelayTx();
         TXD2=b5;
         DelayTx();
         TXD2=b6;
         DelayTx();
         TXD2=b7;
         DelayTx();
         TXD2=nd;   //stop
         DelayTx();

使用特权

评论回复
16
icecut| | 2011-4-22 14:08 | 只看该作者
有意思了

使用特权

评论回复
17
icecut| | 2011-4-22 14:08 | 只看该作者
读ld有等待?

使用特权

评论回复
18
xinzha| | 2011-4-22 16:01 | 只看该作者
楼主何不试试连续四次调用同一函数?说不定情况也是这样的。
想到有几种可能性会导致这种状况:
1. ahb总线上有其他master做了你不知道的操作,打断了cpu对总线的存取
2. 没有禁止中断,程序被中断打断
3. 这几段程序分属不同的memory块,块切换和读写切换的时候会有几个周期的延迟,但是ahb的这几个周期的延迟应该不至于在慢速的apb上有这么明显的差别

使用特权

评论回复
19
秋天落叶| | 2011-4-22 16:19 | 只看该作者
这个得看看手册

使用特权

评论回复
20
大王123|  楼主 | 2011-4-22 20:12 | 只看该作者
18# xinzha



连续四次调用同一函数,得到的波形都和调用一次的一样.  
总中断是关着的,作了这么多年和单片机;我不会连中断这点都想不到吧。
还有,我做这个程序是为了模拟一个高速的串口发送.波特率600M ,所以要精确计算到每一条指令的执行时间。

使用特权

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

本版积分规则

2

主题

18

帖子

1

粉丝