[STM32F1] 16位单片机的函数如何移植到32位单片机上

[复制链接]
2162|39
 楼主| wenfen 发表于 2022-9-4 12:56 | 显示全部楼层 |阅读模式
16位单片机的函数如何移植到32位单片机上?
 楼主| wenfen 发表于 2022-9-4 13:01 | 显示全部楼层
我现在用的是STM32,想把之前飞思卡尔上单片机(16位)的一个函数移植到STM32上但是移植之后函数的处理得到数据不同,问了一下说可能是函数惊醒位操作原因导致结果不同。我想问该如何移植这种?需要注意什么?
liuzaiy 发表于 2022-9-4 13:08 | 显示全部楼层

一个个子函数,慢慢移植;
jiajs 发表于 2022-9-4 13:10 | 显示全部楼层

都是C语言,差不多的;
位操作的话,用宏定义,写个替换的
jiajs 发表于 2022-9-4 13:13 | 显示全部楼层
直接移植就行了。32的机器支持16位的数据
liuzaiy 发表于 2022-9-4 13:43 | 显示全部楼层
函数整个复制过去就行了。
stly 发表于 2022-9-4 13:45 | 显示全部楼层
注意:大小端是否一致,主要是指针指向的地址需检查
pengf 发表于 2022-9-4 13:47 | 显示全部楼层
16位单片机int类型是2字节,32位该类型是4字节,检查下所有用到数据类型int的地方。
jlyuan 发表于 2022-9-4 13:49 | 显示全部楼层
估计你是完全不懂这些玩意,否则不是什么大事啊!
 楼主| wenfen 发表于 2022-9-4 13:51 | 显示全部楼层
我16位单片机是大端 STM32是小端 。这个怎么转换或在哪里转换
 楼主| wenfen 发表于 2022-9-4 13:54 | 显示全部楼层
嗯 我是真不懂这东西。这个是哈希算法,看了好久没有看懂,就想着干脆直接移植了。。。
 楼主| wenfen 发表于 2022-9-4 13:56 | 显示全部楼层
我查了一下就是位操作那里出了问题
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);
   
}
示例,如果用宏定义的话该如何定义?这个函数用的哈希算法看不懂,就只能照搬
zhanghqi 发表于 2022-9-4 13:59 | 显示全部楼层
看不懂
 楼主| wenfen 发表于 2022-9-4 14:02 | 显示全部楼层
的确是大小端导致的问题最后解决了。麻烦大家了
LLGTR 发表于 2022-9-4 15:28 | 显示全部楼层
改一下数据类型,其他基本不用动。32位会兼容大多数16位的程序的。
Henryko 发表于 2022-9-4 21:09 | 显示全部楼层
主要改下指针就差不多
林间有新绿 发表于 2022-9-24 15:03 | 显示全部楼层
正常移植就好了,因为都是C语言嘛

风吻过你的不羁 发表于 2022-9-24 15:25 | 显示全部楼层
这个看你运用的是什么语言,如果语言不一样,就需要重新编写了

一枝香 发表于 2022-9-24 15:47 | 显示全部楼层
应用的话,基本上都不是看多少位单片机的,而是业务逻辑

銀河 发表于 2022-9-24 16:09 | 显示全部楼层
你好好的梳理一下程序呗,看看代码结构再重构一下32的单片机程序呗

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

本版积分规则

737

主题

8940

帖子

8

粉丝
快速回复 在线客服 返回列表 返回顶部