查看: 2355|回复: 4

[其他] C语言编程中的指针问题

[复制链接]

该用户从未签到

6

主题

21

帖子

0

新手上路

Rank: 1

积分
45
最后登录
1970-1-1
发表于 2011-7-26 21:20:55 | 显示全部楼层 |阅读模式
买的MC9S08DZ60开发板上SCI模块自带了个程序,有部分用到了指针,感觉自己没理解,希望C语言方面的高手指点一下。
#define   SCIC1     0x02
#define   SCIC2     0x03
unsigned volatile char *sci_periph[2] = {
  &SCI1BDH,
  &SCI2BDH
};//定义了一包含两个元素的指针数组
/////////////////////////////////////////////////////////////////////////////////////////
// 打开串口通信
/////////////////////////////////////////////////////////////////////////////////////////
void SCIOpenCommunication(unsigned char sci_num)
{
 
  unsigned volatile char *sci_pt;
  sci_pt = sci_periph[sci_num];
 
  if (!sci_status[sci_num])
  {
    // 打开串口通信模块
    sci_status[sci_num] = TRUE;
     
    // 设置波特率
    if (sci_num)
      SCI2BD = BR;
    else
      SCI1BD = BR;                    
    //8位数据位 1位停止位 无校检位  
        sci_pt[SCIC1] = 0x00;
    // 发送器与接收器允许
    sci_pt[SCIC2] = 0x0C;
   
    // 定时器益出 1ms
    TPM1MODH = 0x0F;
    TPM1MODL = 0xA0;
 
    // Enable Interrupt Overflow Timer1 and
    // select bus clock as clock source. Prescaler Divisor = 1
    TPM1SC = 0x48;
  }
       
}
 
 中间无关的可略去,偶只想明白sci_pt[SCIC1] = 0x00;
这句是神马意思?sci_pt是个指针,存放的是SCI1BDH或SCI2BDH寄存器的地址,sci_pt[0x02]是什么?一个头两个大,哎
我知道答案 目前已有4人回答
回复

使用道具 举报

该用户从未签到

6

主题

21

帖子

0

新手上路

Rank: 1

积分
45
最后登录
1970-1-1
 楼主| 发表于 2011-7-26 22:10:12 | 显示全部楼层

RE:C语言编程中的指针问题

我说一下我对安版主回复的理解,不知道对不对。unsigned volatile char *sci_periph[2] = {
  &SCI1BDH,
  &SCI2BDH
这是定义了一个指针数组,该数组中包含两个指针,一个指针指向的是SCI1BDH的首地址,另一个指向的是SCI2BDH
的首地址。SCIOpenCommunication()这个函数是我再主函数中要调用的,在条用时肯定已经给sci_num赋值,这里就假设是0吧。unsigned volatile char *sci_pt;sci_pt = sci_periph[sci_num];这两句后指针变量sci_pt指向的应该是SCI1BDH的首地址了吧。sci_pt[SCIC1]就是*SCIC1,这句话我还是不太明白。sci_pt是指针变量,又不是数组,sci_pt[SCIC1]有什么意义?我C语言学的不好,见谅啊
  • TA的每日心情
    难过
    2021-12-15 16:01
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    305

    主题

    4701

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    377
    最后登录
    2023-8-16
    发表于 2011-7-27 10:00:43 | 显示全部楼层

    RE:C语言编程中的指针问题

    不是把指针*sci_pt 指到 sci_periph[sci_num]了吗?这样写让人很不明白。你就把sci_periph[sci_num]当成一个数组。然后数组里面的第一个值又是一个指针。这样绕来绕去的。是不容易理解,你自己用几个例子画一下就明白了。
    该会员没有填写今日想说内容.
  • TA的每日心情
    慵懒
    前天 15:39
  • 签到天数: 13 天

    连续签到: 1 天

    [LV.3]偶尔看看II

    1

    主题

    23

    帖子

    0

    注册会员

    Rank: 2

    积分
    68
    最后登录
    2025-7-24
    发表于 2011-7-28 14:26:02 | 显示全部楼层

    RE:C语言编程中的指针问题

    SCI1BDH或SCI2BDH应该是寄存器组的首地址,sci_pt[0x02]相当于*(SCI1BDH+2) 就是给第三个寄存器赋值 不知道理解的对不对

    该用户从未签到

    6

    主题

    21

    帖子

    0

    新手上路

    Rank: 1

    积分
    45
    最后登录
    1970-1-1
     楼主| 发表于 2011-7-28 17:29:21 | 显示全部楼层

    回复:C语言编程中的指针问题

    回复第 5 楼 于2011-07-28 06:26:02发表:
    SCI1BDH或SCI2BDH应该是寄存器组的首地址,sci_pt[0x02]相当于*(SCI1BDH+2) 就是给第三个寄存器赋值 不知道理解的对不对 
     
    是的,就是给第三个寄存器赋值。请问sci_pt[0x02]=*(SCI1BDH+2) 这种用法在C语言中有吗?偶搜了半天都没找到这种用法
    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-7-26 18:56 , Processed in 0.088525 second(s), 23 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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