OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 8076|回复: 2

STM32F407探索板_大端小端问题,采用函数实现验证之后出现问题

[复制链接]

6

主题

55

帖子

0

精华

高级会员

Rank: 4

积分
831
金钱
831
注册时间
2015-6-11
在线时间
119 小时
发表于 2016-1-30 09:19:45 | 显示全部楼层 |阅读模式
3金钱
本帖最后由 凉风习习 于 2016-1-30 09:21 编辑

在做一个简单的图像识别的项目,摄像像头(ov7670)采集到的帧数据储存到sram(连个8bit),处理后在送到LCD显示。
LCD显示乱码(从摄像头直接送到LCD是正常的)。考虑是大小端问题导致。

在原子教程上看到407是小端模式。于是在开发板上验证
[mw_shl_code=applescript,true] //更新LCD显示
u8 Is_bigendian()
{
u16 a=0x1257;
         if(*(u8*)&a==12)
         return 1;            //返回1显示bigendian
         if(*(u8*)&a==57)
         return 0;            //返回0显示littleendian
}[/mw_shl_code]
问题来了采用上面的函数显示的是大端模式。
只有这样
[mw_shl_code=applescript,true] //更新LCD显示
u8 Is_bigendian()
{
u16 a=0x1257;
         if(*(u8*)&a==0x12)
         return 1;
         if(*(u8*)&a==0x57)
         return 0;
}[/mw_shl_code]
结果才是显示的littleendian。
请高手解答

最佳答案

查看完整内容[请看2#楼]

[mw_shl_code=c,true]#include union node { int a; char b[4]; }; int main() { union node t; t.a=1; printf("%d\n",t.b[0]); printf("%d\n",t.b[1]); printf("%d\n",t.b[2]); printf("%d\n",t.b[3]); } 把int的每个字节读出来。要是第一个字节为0证明是大端模式 第一个字节为1证明是小端模式[/mw_shl_code]
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165377
金钱
165377
注册时间
2010-12-1
在线时间
2111 小时
发表于 2016-1-30 09:19:46 | 显示全部楼层
[mw_shl_code=c,true]#include<stdio.h>
union node
{
int a;
char b[4];
};

int main()
{
union node t;
t.a=1;
printf("%d\n",t.b[0]);
printf("%d\n",t.b[1]);
printf("%d\n",t.b[2]);
printf("%d\n",t.b[3]);
}
把int的每个字节读出来。要是第一个字节为0证明是大端模式 第一个字节为1证明是小端模式[/mw_shl_code]
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
5
金钱
5
注册时间
2019-4-13
在线时间
1 小时
发表于 2021-8-24 09:33:13 | 显示全部楼层
再过来学习下
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-27 02:50

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表