句柄和指針的使用問題?

xhwu3721 2006-08-27 11:25:33
句柄和指針的使用經有時會搞不清楚,如下有一個應用,不知是否有問題?
函數的原型如下:
RtStatus_t ddi_rtc_OpenAlarm( AlarmHandle_t* pHandle );
RtStatus_t ddi_rtc_CloseAlarm( AlarmHandle_t handle );
RtStatus_t ddi_rtc_RegisterAlarmCallback( AlarmHandle_t handle,pCallback_t callback,
void* pOpaqueData );
RtStatus_t ddi_rtc_SetAlarmTime( AlarmHandle_t handle,uint32_t absoluteSeconds );
RtStatus_t ddi_rtc_SetAlarmMode( AlarmHandle_t handle,RtcAlarmMode_t mode );
RtStatus_t ddi_rtc_EnableAlarm( AlarmHandle_t handle,bool enable );
我這樣來調用可以嗎?
AlarmHandle_t alarmHandle;
pCallback_t pcallbak;
void *pOpaqueData;
void setAlarm()
{
//Enable the Alarm module;
ddi_alarm_EnableAlarmModule();
//
ddi_rtc_OpenAlarm( &alarmHandle );
ddi_rtc_SetAlarmTime(alarmHandle,60);
ddi_rtc_SetAlarmMode(alarmHandle,ALARM_MODE_BOTH);
ddi_rtc_RegisterAlarmCallback( alarmHandle,&pcallbak,&pOpaqueData );
}
編譯沒有提示有問題,但是實際卻沒有alarm功能?不知是不是我的句柄的用法問題?
...全文
337 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
菜牛 2006-08-27
  • 打赏
  • 举报
回复
首先,句柄、指针都是一种数据类型,怎么使用完全要视当时上下文而定。

其次,你这里的函数ddi_rtc_OpenAlarm看起来应该是返回一个AlarmHandle_t*对象,这个对象应该是在函数内部分配的,因此你要这样调用:
AlarmHandle_t *alarmHandle = NULL;
ddi_rtc_OpenAlarm(alarmHandle);

当然还要进行函数返回值和返回数据有效性的判断。
xhwu3721 2006-08-27
  • 打赏
  • 举报
回复
To:syy64(太平洋):謝謝.
AlarmHandle_t 的定義如下: typedef uint8_t AlarmHandle_t;
DentistryDoctor 2006-08-27
  • 打赏
  • 举报
回复
不清楚你这段代码的上下文。你这些函数有什么要求,请问这些代码的问题,如果是用的什么SDK,请参考这些SDK的文档。
syy64 2006-08-27
  • 打赏
  • 举报
回复
1、AlarmHandle_t 到底是什么类型?
2、单步调试,要确认每一行都正确。
xhwu3721 2006-08-27
  • 打赏
  • 举报
回复
謝謝!
是的,會出錯,但如何能得到解決呢?
如果按我最初的用法,不行嗎?
AlarmHandle_t alarmHandle;
pCallback_t pcallbak;
void *pOpaqueData;
void setAlarm()
{
//Enable the Alarm module;
ddi_alarm_EnableAlarmModule();
//
ddi_rtc_OpenAlarm( &alarmHandle );
ddi_rtc_SetAlarmTime(alarmHandle,60);
ddi_rtc_SetAlarmMode(alarmHandle,ALARM_MODE_BOTH);
ddi_rtc_RegisterAlarmCallback( alarmHandle,&pcallbak,&pOpaqueData );
}
snowbirdfly 2006-08-27
  • 打赏
  • 举报
回复
conversion from pointer to smaller integer
提示将指针转化为整形出错~~~
AlarmHandle_t为uint8_t,但是alarmHandle不也是AlarmHandle_t类型,那怎么会那里来的 pointer呢??
如果這樣強制轉換可以編譯通過?
我觉得会出错~~~

xhwu3721 2006-08-27
  • 打赏
  • 举报
回复
warning如下:
line 412: warning #767-D: conversion from pointer to smaller integer
ddi_rtc_SetAlarmMode((AlarmHandle_t)alarmHandle,ALARM_MODE_BOTH);
xhwu3721 2006-08-27
  • 打赏
  • 举报
回复
不是自己寫的,是另外一家廠商提供的sdk,如果這樣強制轉換可以編譯通過,但有warning.
ddi_rtc_SetAlarmMode((AlarmHandle_t)alarmHandle,...)
snowbirdfly 2006-08-27
  • 打赏
  • 举报
回复
对了,按照函数原形
RtStatus_t ddi_rtc_SetAlarmMode( AlarmHandle_t handle,RtcAlarmMode_t mode );

ddi_rtc_SetAlarmMode(alarmHandle,ALARM_MODE_BOTH);
这样写应该没有问题~~~
但是,error #167: argument of type "AlarmHandle_t *" is incompatible with parameter of type "AlarmHandle_t"
提示出错,那这个函数是不是你自己写的函数阿??
xhwu3721 2006-08-27
  • 打赏
  • 举报
回复
謝謝snowbirdfly.還是不行我改過了.出錯如下:
line 412: error #167: argument of type "AlarmHandle_t **" is incompatible with parameter of type "AlarmHandle_t"
ddi_rtc_SetAlarmMode(&alarmHandle,ALARM_MODE_BOTH);
snowbirdfly 2006-08-27
  • 打赏
  • 举报
回复
"AlarmHandle_t *"这个提示是参数类型不兼容~~~
"AlarmHandle_t *"和AlarmHandle_t类型不一致~~~
你看看将alarmHandle改成&alarmHandle试一下~~~
xhwu3721 2006-08-27
  • 打赏
  • 举报
回复
原型應該沒有問題,出錯提示為:
line 412: error #167: argument of type "AlarmHandle_t *" is incompatible with parameter of type "AlarmHandle_t"
ddi_rtc_SetAlarmMode(alarmHandle,ALARM_MODE_BOTH);
snowbirdfly 2006-08-27
  • 打赏
  • 举报
回复
RtStatus_t ddi_rtc_SetAlarmTime( AlarmHandle_t handle,uint32_t absoluteSeconds );
这个函数原形,应该没有问题吧~~~
ddi_rtc_SetAlarmTime(alarmHandle,60);
函数参数没有问题~~~
那你屏蔽掉这句看下面是不是还有错误~~~
snowbirdfly 2006-08-27
  • 打赏
  • 举报
回复
ddi_rtc_SetAlarmTime(alarmHandle,60);
這一句卻編譯不過,應該怎麽辦啊?
这么编译不过阿?
有什么提示吗??
xhwu3721 2006-08-27
  • 打赏
  • 举报
回复
謝謝,那ddi_rtc_SetAlarmTime(alarmHandle,60);
這一句卻編譯不過,應該怎麽辦啊?

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧