打印
[STM32F1]

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

[复制链接]
551|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wenfen|  楼主 | 2020-8-16 17:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
16位单片机的函数如何移植到32位单片机上?

使用特权

评论回复
沙发
houcs| | 2020-8-16 17:35 | 只看该作者
楼主详细说说怎么回事啊,这么说太笼统了

使用特权

评论回复
板凳
wenfen|  楼主 | 2020-8-16 17:35 | 只看该作者
我现在用的是STM32,想把之前飞思卡尔上单片机(16位)的一个函数移植到STM32上但是移植之后函数的处理得到数据不同,问了一下说可能是函数惊醒位操作原因导致结果不同。我想问该如何移植这种?需要注意什么?

使用特权

评论回复
地板
liuzaiy| | 2020-8-16 17:43 | 只看该作者
一个个子函数,慢慢移植;

使用特权

评论回复
5
houcs| | 2020-8-16 17:43 | 只看该作者

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

使用特权

评论回复
6
tian111| | 2020-8-16 17:59 | 只看该作者
直接移植就行了。32的机器支持16位的数据

使用特权

评论回复
7
yinxiangh| | 2020-8-16 18:02 | 只看该作者
函数整个复制过去就行了。

使用特权

评论回复
8
juventus9554| | 2020-8-16 18:06 | 只看该作者
注意:大小端是否一致,主要是指针指向的地址需检查

使用特权

评论回复
9
pangb| | 2020-8-16 18:21 | 只看该作者
16位单片机int类型是2字节,32位该类型是4字节,检查下所有用到数据类型int的地方。

使用特权

评论回复
10
chenjunt| | 2020-8-16 18:21 | 只看该作者
估计你是完全不懂这些玩意,否则不是什么大事啊!

使用特权

评论回复
11
wenfen|  楼主 | 2020-8-16 18:25 | 只看该作者
我16位单片机是大端 STM32是小端 。这个怎么转换或在哪里转换

使用特权

评论回复
12
wenfen|  楼主 | 2020-8-16 18:28 | 只看该作者
嗯 我是真不懂这东西。这个是哈希算法,看了好久没有看懂,就想着干脆直接移植了。。。

使用特权

评论回复
13
wenfen|  楼主 | 2020-8-16 18:32 | 只看该作者
我查了一下就是位操作那里出了问题
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);
   
}
示例,如果用宏定义的话该如何定义?这个函数用的哈希算法看不懂,就只能照搬

使用特权

评论回复
14
zyf部长| | 2020-8-16 18:44 | 只看该作者
看不懂

使用特权

评论回复
15
wenfen|  楼主 | 2020-8-16 18:48 | 只看该作者
的确是大小端导致的问题最后解决了。麻烦大家了

使用特权

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

本版积分规则

737

主题

8940

帖子

8

粉丝