打印
[经验分享]

一段C语言结构体的程序

[复制链接]
1212|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Edisons|  楼主 | 2016-7-19 19:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
typedef struct
{
  vu16 LCD_REG;
  vu16 LCD_RAM;
} LCD_TypeDef;

/* Note: LCD /CS is CE4 - Bank 4 of NOR/SRAM Bank 1~4 */
#define LCD_BASE        ((u32)(0x60000000 | 0x0C000000))
#define LCD             ((LCD_TypeDef *) LCD_BASE)

-----------
以上定义是不是给结构体定义一个基地址为0x6c000000,成员LCD_REG 的地址为0x6c000000,成员LCD_RAM 的地址为0x6c000001,

那如果我这样定义绝对地址,是不是和上面的一样
#define LCD_REG   ((u32)0x6c000000)
#define LCD_RAM   ((u32)0x6c000001)

----
在STM32单片机中用FSMC刷LCD用到这样的语句有点看不明白
沙发
_gege| | 2016-7-19 19:31 | 只看该作者
C语言里结构体本就是有个首地址,各个成员按顺序依次排列存储的。

使用特权

评论回复
板凳
Mozarts| | 2016-7-19 19:31 | 只看该作者
#define LCD_REG   ((u32)0x6c000000)
    #define LCD_RAM   ((u32)0x6c000001)
    ...为什么用u32去强制转换呢?

使用特权

评论回复
地板
Listate| | 2016-7-19 19:37 | 只看该作者
FSMC的A0接至LCD的数据与命令选择端

A0为0时表示写命令
A0为1时表示写数据

使用特权

评论回复
5
laozhongyi| | 2016-7-19 19:38 | 只看该作者
我知道按楼上这样写法是可以的

但我有看到别人写的程序是这样的
typedef struct
{
  vu16 LCD_REG;
  vu16 LCD_RAM;
} LCD_TypeDef;

#define LCD             ((LCD_TypeDef *) 0x6c000000)

LCD->LCD_REG = CMD;
LCD->LCD_REG = DATA;

使用特权

评论回复
6
wanglaojii| | 2016-7-19 19:45 | 只看该作者
LCD->LCD_REG = CMD;
LCD->LCD_REG = DATA;

不知这两种表示方法有啥区别。。

使用特权

评论回复
7
zhouhuanの| | 2016-7-19 19:48 | 只看该作者
((LCD_TypeDef *) 0x6c000000)是将0x6c000000地址开始的2个半字(现在看来数据总线是8位了)转换为LCD_TypeDef类型。

使用特权

评论回复
8
handleMessage| | 2016-7-19 19:54 | 只看该作者
应该是
   8位宽度
   *((volatile UINT8 * )0x6C000001) = DATA;
    *((volatile UINT8 * )0x6C000000) = DATA;
    16位宽度的话应该是这样:
    *((volatile UINT16 * )0x6C000002) = DATA;  //16位是两个字节,所以地址加2
    *((volatile UINT16 * )0x6C000000) = DATA;  

使用特权

评论回复
9
Edisons|  楼主 | 2016-7-19 19:56 | 只看该作者
Listate 发表于 2016-7-19 19:37
FSMC的A0接至LCD的数据与命令选择端

A0为0时表示写命令

恩是的,我知道这种写法是可以的。

使用特权

评论回复
10
Edisons|  楼主 | 2016-7-19 19:57 | 只看该作者
laozhongyi 发表于 2016-7-19 19:38
我知道按楼上这样写法是可以的

但我有看到别人写的程序是这样的

不错啊, 这个正好也需要啊,多谢分享了。

使用特权

评论回复
11
Edisons|  楼主 | 2016-7-19 19:57 | 只看该作者
:)谢谢上面各位大神,终于有点感觉了呀

使用特权

评论回复
12
bbapple| | 2016-7-19 20:04 | 只看该作者
写代码一定要仔细,一点忽略的地方可能几天都找不到哪里出错了。

使用特权

评论回复
13
ittechbay| | 2016-7-20 17:19 | 只看该作者
本帖最后由 ittechbay 于 2016-7-20 17:24 编辑

“#define  A   const”就是把一个常数const简写成符号A

"#define LCD_REG   ((u32)0x6c000000)
#define LCD_RAM   ((u32)0x6c000001)"
你这样定义符号常量LCD_RAM、 LCD_REG,不就和结构体的成员名重复了吗。虽然语法上能通过,但别人阅读时容易引起混淆

使用特权

评论回复
14
台湾笙泉MCU| | 2016-7-21 09:22 | 只看该作者
您好,我这边是笙泉总代理,您可以加我QQ3166720948,您可以加我QQ聊下

使用特权

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

本版积分规则

58

主题

1426

帖子

0

粉丝