打印
[STM32F1]

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

[复制链接]
1449|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语言,差不多的;
位操作的话,用宏定义,写个替换的

使用特权

评论回复
5
jiajs| | 2022-9-4 13:13 | 只看该作者
直接移植就行了。32的机器支持16位的数据

使用特权

评论回复
6
liuzaiy| | 2022-9-4 13:43 | 只看该作者
函数整个复制过去就行了。

使用特权

评论回复
7
stly| | 2022-9-4 13:45 | 只看该作者
注意:大小端是否一致,主要是指针指向的地址需检查

使用特权

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

使用特权

评论回复
9
jlyuan| | 2022-9-4 13:49 | 只看该作者
估计你是完全不懂这些玩意,否则不是什么大事啊!

使用特权

评论回复
10
wenfen|  楼主 | 2022-9-4 13:51 | 只看该作者
我16位单片机是大端 STM32是小端 。这个怎么转换或在哪里转换

使用特权

评论回复
11
wenfen|  楼主 | 2022-9-4 13:54 | 只看该作者
嗯 我是真不懂这东西。这个是哈希算法,看了好久没有看懂,就想着干脆直接移植了。。。

使用特权

评论回复
12
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);
   
}
示例,如果用宏定义的话该如何定义?这个函数用的哈希算法看不懂,就只能照搬

使用特权

评论回复
13
zhanghqi| | 2022-9-4 13:59 | 只看该作者
看不懂

使用特权

评论回复
14
wenfen|  楼主 | 2022-9-4 14:02 | 只看该作者
的确是大小端导致的问题最后解决了。麻烦大家了

使用特权

评论回复
15
LLGTR| | 2022-9-4 15:28 | 只看该作者
改一下数据类型,其他基本不用动。32位会兼容大多数16位的程序的。

使用特权

评论回复
16
Henryko| | 2022-9-4 21:09 | 只看该作者
主要改下指针就差不多

使用特权

评论回复
17
林间有新绿| | 2022-9-24 15:03 | 只看该作者
正常移植就好了,因为都是C语言嘛

使用特权

评论回复
18
风吻过你的不羁| | 2022-9-24 15:25 | 只看该作者
这个看你运用的是什么语言,如果语言不一样,就需要重新编写了

使用特权

评论回复
19
一枝香| | 2022-9-24 15:47 | 只看该作者
应用的话,基本上都不是看多少位单片机的,而是业务逻辑

使用特权

评论回复
20
銀河| | 2022-9-24 16:09 | 只看该作者
你好好的梳理一下程序呗,看看代码结构再重构一下32的单片机程序呗

使用特权

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

本版积分规则

737

主题

8940

帖子

8

粉丝