打印
[STM32F1]

16位单片机的函数如何移植到32位单片机上?

[复制链接]
1325|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
749120145|  楼主 | 2017-7-6 10:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我现在用的是STM32,想把之前飞思卡尔上单片机(16位)的一个函数移植到STM32上但是移植之后函数的处理得到数据不同,问了一下说可能是函数惊醒位操作原因导致结果不同。我想问该如何移植这种?需要注意什么?谢谢
沙发
mmuuss586| | 2017-7-6 12:16 | 只看该作者
一个个子函数,慢慢移植;

都是C语言,差不多的;
位操作的话,用宏定义,写个替换的

使用特权

评论回复
板凳
dalarang| | 2017-7-6 12:21 | 只看该作者
函数整个复制过去就行了。
只有两点需要注意:
1、大小端是否一致,主要是指针指向的地址需检查。
2、16位单片机int类型是2字节,32位该类型是4字节,检查下所有用到数据类型int的地方。

使用特权

评论回复
地板
sfd123| | 2017-7-6 12:50 | 只看该作者
估计你是完全不懂这些玩意,否则不是什么大事啊!

使用特权

评论回复
5
749120145|  楼主 | 2017-7-7 09:06 | 只看该作者
dalarang 发表于 2017-7-6 12:21
函数整个复制过去就行了。
只有两点需要注意:
1、大小端是否一致,主要是指针指向的地址需检查。

我16位单片机是大端 STM32是小端 。这个怎么转换或在哪里转换

使用特权

评论回复
6
749120145|  楼主 | 2017-7-7 09:07 | 只看该作者
sfd123 发表于 2017-7-6 12:50
估计你是完全不懂这些玩意,否则不是什么大事啊!

嗯 我是真不懂这东西。这个是哈希算法,看了好久没有看懂,就想着干脆直接移植了。。。

使用特权

评论回复
7
749120145|  楼主 | 2017-7-7 09:09 | 只看该作者
mmuuss586 发表于 2017-7-6 12:16
一个个子函数,慢慢移植;

都是C语言,差不多的;

我查了一下就是位操作那里出了问题
void R0(uint32_t *v, uint32_t *w, uint32_t *x, uint32_t *y, uint32_t *z, uint8_t i)
{
    (*z)+=(((*w)&((*x)^(*y)))^(*y))+blk0(i)+0x5A827999+rol(*v,5);
    (*w)=rol(*w,30);
   
}
示例,如果用宏定义的话该如何定义?这个函数用的哈希算法看不懂,就只能照搬

使用特权

评论回复
8
749120145|  楼主 | 2017-7-7 09:13 | 只看该作者
749120145 发表于 2017-7-7 09:09
我查了一下就是位操作那里出了问题
void R0(uint32_t *v, uint32_t *w, uint32_t *x, uint32_t *y, uint3 ...

#define blk0(i) block->l
#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))

使用特权

评论回复
9
LMCH| | 2017-7-7 20:26 | 只看该作者
看不懂

使用特权

评论回复
10
749120145|  楼主 | 2017-9-7 14:41 | 只看该作者
的确是大小端导致的问题最后解决了。麻烦大家了

使用特权

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

本版积分规则

13

主题

46

帖子

1

粉丝