5063|11

75

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

高手指点,cosmic的变量传递的问题,急 [复制链接]

void dec_add1(unsigned char  *array1,unsigned char *array2,unsigned char n1,unsigned char n2)
{
unsigned char temp,i,carry;

    carry=0;
    for(i=0;i<n2;i++)
    {
        temp = array1-(array1>>4)*6;
        temp += array2-(array2>>4)*6;
        temp += carry;
        carry = temp/100;
        temp = temp%100;
        array1 = (temp/10)*6+temp;
    }

    while(carry&&(i<n1))
    {
        temp = array1-(array1>>4)*6;
        temp+=carry;
        carry=temp/100;
        temp=temp%100;
        array1=(temp/10)*6+temp;
    i++; 

    }

}

如上一段函数,temp,i,carry变量是放在0页的,*array1,*array2指针也是在零页,但是array指向的地址不是在0页,现在的问题是
temp = array1-(array1>>4)*6; temp怎么也得不到array的计算结果
array1 = (temp/10)*6+temp;array也得不到temp算出的结果

高手指点,需要怎样才能传递参数
此帖出自stm32/stm8论坛

最新回复

                                 我问题好转的意思是,已经得到想要的结果,但是不知道什么原因!所以不保证以后会不会再出现同样的问题   详情 回复 发表于 2009-4-7 13:34
点赞 关注
 

回复
举报

63

帖子

0

TA的资源

一粒金砂(初级)

沙发
 

把对应的汇编抄出来看看

同时试试:void dec_add1(unsigned char far *array1,unsigned char far *array2,unsigned char n1,unsigned char n2)
此帖出自stm32/stm8论坛
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

板凳
 

好的,明天加班试试

                                 好的,明天加班试试
此帖出自stm32/stm8论坛
 
 

回复

58

帖子

0

TA的资源

一粒金砂(初级)

4
 

不能改成如下,报错!

                                 void dec_add1(unsigned char far *array1,unsigned char far *array2,unsigned char n1,unsigned char n2)
此帖出自stm32/stm8论坛
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

5
 

麻烦看下

8317                     ; 1648 void dec_add1(unsigned char  *array1,unsigned char  *array2,unsigned char n1,unsigned char n2)
8317                     ; 1649 {
8318                         switch    .text
8320                         xref    _dec_add1$L
8321  1c61               _dec_add1:
8323  1c61 c70001            ld    _dec_add1$L+1,a
8324  1c64 cf0000            ld    _dec_add1$L,x
8326                     ; 1652     carry=0;
8328  1c67 4f                clr    a
8329  1c68 c7fffd            ld    _dec_add1$L-3,a
8330                     ; 1653     for(i=0;i<n2;i++)
8332  1c6b 207b              jra    L3313
8333  1c6d               L7213:
8334                     ; 1655         temp = array1-(array1>>4)*6;
8336  1c6d c60000            ld    a,_dec_add1$L
8337  1c70 b700              ld    c_x,a
8338  1c72 c60001            ld    a,_dec_add1$L+1
8339  1c75 b701              ld    c_x+1,a
8340  1c77 cefffe            ld    x,_dec_add1$L-2
8341  1c7a 89                push    x
8342  1c7b 92d600            ld    a,([c_x.w],x)
8343  1c7e 4e                swap    a
8344  1c7f a40f              and    a,#15
8345  1c81 ae06              ld    x,#6
8346  1c83 42                mul    x,a
8347  1c84 85                pop    x
8348  1c85 92d000            sub    a,([c_x.w],x)
8349  1c88 40                neg    a
8350  1c89 c7ffff            ld    _dec_add1$L-1,a
8351                     ; 1656         temp += array2-(array2>>4)*6;
8353  1c8c c60002            ld    a,_dec_add1$L+2
8354  1c8f b700              ld    c_x,a
8355  1c91 c60003            ld    a,_dec_add1$L+3
8356  1c94 b701              ld    c_x+1,a
8357  1c96 cefffe            ld    x,_dec_add1$L-2
8358  1c99 89                push    x
8359  1c9a 92d600            ld    a,([c_x.w],x)
8360  1c9d 4e                swap    a
8361  1c9e a40f              and    a,#15
8362  1ca0 ae06              ld    x,#6
8363  1ca2 42                mul    x,a
8364  1ca3 85                pop    x
8365  1ca4 92d000            sub    a,([c_x.w],x)
8366  1ca7 40                neg    a
8367  1ca8 cbffff            add    a,_dec_add1$L-1
8368                     ; 1657         temp += carry;
8370  1cab cbfffd            add    a,_dec_add1$L-3
8371  1cae c7ffff            ld    _dec_add1$L-1,a
8372                     ; 1658         carry = temp/100;
8374  1cb1 ae64              ld    x,#100
8375  1cb3 cd0000            call    c_cdivx
8377  1cb6 c7fffd            ld    _dec_add1$L-3,a
8378                     ; 1659         temp = temp%100;
8380  1cb9 c6ffff            ld    a,_dec_add1$L-1
8381  1cbc ae64              ld    x,#100
8382  1cbe cd0000            call    c_cdivx
8384  1cc1 cfffff            ld    _dec_add1$L-1,x
8385                     ; 1660         array1 = (temp/10)*6+temp;
8387  1cc4 c60000            ld    a,_dec_add1$L
8388  1cc7 b700              ld    c_x,a
8389  1cc9 c60001            ld    a,_dec_add1$L+1
8390  1ccc b701              ld    c_x+1,a
8391  1cce cefffe            ld    x,_dec_add1$L-2
8392  1cd1 89                push    x
8393  1cd2 c6ffff            ld    a,_dec_add1$L-1
8394  1cd5 ae0a              ld    x,#10
8395  1cd7 cd0000            call    c_cdivx
8397  1cda ae06              ld    x,#6
8398  1cdc 42                mul    x,a
8399  1cdd cbffff            add    a,_dec_add1$L-1
8400  1ce0 85                pop    x
8401  1ce1 92d700            ld    ([c_x.w],x),a
8402                     ; 1653     for(i=0;i<n2;i++)
8404  1ce4 c6fffe            ld    a,_dec_add1$L-2
8405  1ce7 4c                inc    a
8406  1ce8               L3313:
8408  1ce8 c7fffe            ld    _dec_add1$L-2,a
8411  1ceb c10005            cp    a,_dec_add1$L+5
8412  1cee 2403cc1c6d        jrult    L7213
8414  1cf3 205c              jra    L1413
8415  1cf5               L7313:
8416                     ; 1665         temp = array1-(array1>>4)*6;
8418  1cf5 c60000            ld    a,_dec_add1$L
8419  1cf8 b700              ld    c_x,a
8420  1cfa c60001            ld    a,_dec_add1$L+1
8421  1cfd b701              ld    c_x+1,a
8422  1cff cefffe            ld    x,_dec_add1$L-2
8423  1d02 89                push    x
8424  1d03 92d600            ld    a,([c_x.w],x)
8425  1d06 4e                swap    a
8426  1d07 a40f              and    a,#15
8427  1d09 ae06              ld    x,#6
8428  1d0b 42                mul    x,a
8429  1d0c 85                pop    x
8430  1d0d 92d000            sub    a,([c_x.w],x)
8431  1d10 40                neg    a
8432                     ; 1666         temp+=carry;
8434  1d11 cbfffd            add    a,_dec_add1$L-3
8435  1d14 c7ffff            ld    _dec_add1$L-1,a
8436                     ; 1667         carry=temp/100;
8438  1d17 ae64              ld    x,#100
8439  1d19 cd0000            call    c_cdivx
8441  1d1c c7fffd            ld    _dec_add1$L-3,a
8442                     ; 1668         temp=temp%100;
8444  1d1f c6ffff            ld    a,_dec_add1$L-1
8445  1d22 ae64              ld    x,#100
8446  1d24 cd0000            call    c_cdivx
8448  1d27 cfffff            ld    _dec_add1$L-1,x
8449                     ; 1669         array1=(temp/10)*6+temp;
8451  1d2a c60000            ld    a,_dec_add1$L
8452  1d2d b700              ld    c_x,a
8453  1d2f c60001            ld    a,_dec_add1$L+1
8454  1d32 b701              ld    c_x+1,a
8455  1d34 cefffe            ld    x,_dec_add1$L-2
8456  1d37 89                push    x
8457  1d38 c6ffff            ld    a,_dec_add1$L-1
8458  1d3b ae0a              ld    x,#10
8459  1d3d cd0000            call    c_cdivx
8461  1d40 ae06              ld    x,#6
8462  1d42 42                mul    x,a
8463  1d43 cbffff            add    a,_dec_add1$L-1
8464  1d46 85                pop    x
8465  1d47 92d700            ld    ([c_x.w],x),a
8466                     ; 1670     i++; 
8468  1d4a c6fffe            ld    a,_dec_add1$L-2
8469  1d4d 4c                inc    a
8470  1d4e c7fffe            ld    _dec_add1$L-2,a
8471  1d51               L1413:
8472                     ; 1663     while(carry&&(i<n1))
8474  1d51 c6fffd            ld    a,_dec_add1$L-3
8475  1d54 2708              jreq    L5413
8477  1d56 c6fffe            ld    a,_dec_add1$L-2
8478  1d59 c10004            cp    a,_dec_add1$L+4
8479  1d5c 2597              jrult    L7313
8480  1d5e               L5413:
8481                     ; 1674 }
8484  1d5e 81                ret    
此帖出自stm32/stm8论坛
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

6
 

请问你这是ST7的程序还是STM8S?

                                 如果是ST7的程序,从对应的反汇编代码看应该没有什么问题,可能要看调用端的函数原型。
此帖出自stm32/stm8论坛
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

7
 

st

                                  
此帖出自stm32/stm8论坛
 
 
 

回复

86

帖子

0

TA的资源

一粒金砂(初级)

8
 

st72324的程序

                                 st72324的程序
此帖出自stm32/stm8论坛
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

9
 

香版请看

我把
array1 = (temp/10)*6+temp;
改成
temp = (temp/10)*6+temp;
array1 = temp;

8385                     ; 1661     temp = (temp/10)*6+temp;
8387  1cc4 9f                ld    a,x
8388  1cc5 ae0a              ld    x,#10
8389  1cc7 cd0000            call    c_cdivx
8391  1cca ae06              ld    x,#6
8392  1ccc 42                mul    x,a
8393  1ccd cbffff            add    a,_dec_add1$L-1
8394  1cd0 c7ffff            ld    _dec_add1$L-1,a
8395                     ; 1662         array1 = temp;
8397  1cd3 c60000            ld    a,_dec_add1$L
8398  1cd6 b700              ld    c_x,a
8399  1cd8 c60001            ld    a,_dec_add1$L+1
8400  1cdb b701              ld    c_x+1,a
8401  1cdd cefffe            ld    x,_dec_add1$L-2
8402  1ce0 c6ffff            ld    a,_dec_add1$L-1
8403  1ce3 92d700            ld    ([c_x.w],x),a

问题好转
此帖出自stm32/stm8论坛
 
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

10
 

请问怎么回事

                                 请问怎么回事
此帖出自stm32/stm8论坛
 
 
 

回复

92

帖子

0

TA的资源

一粒金砂(初级)

11
 

“问题好转”是什么意思?解决了还是没有解决?

                                 如果问题没有解决,什么时候还会出问题?
此帖出自stm32/stm8论坛
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

12
 

我问题好转的意思是,已经得到想要的结果,但是不知道什

                                 我问题好转的意思是,已经得到想要的结果,但是不知道什么原因!所以不保证以后会不会再出现同样的问题
此帖出自stm32/stm8论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表