Source-lib外设库第五弹;
现在看网上最多设置rtc事件是用date命令和hwclock命令来设置;
现在我们用c来写:
这次主函数真的超级简单,初始化rtc时间,然后释放rtc。
编译运行下,等会咱们再来看代码;
老规矩先安装库:
运行程序:
没有报错;
执行命令查看下rtc的时间是否更新对:

什么情况怎么多l一个月。
这段代码没有问题,再看下set_rtc_time函数:
这段代码验证了下也没有问题;
查看内核代码后发现问题:
修改代码:
最后编译测试问题解决,效果如下:

现在看网上最多设置rtc事件是用date命令和hwclock命令来设置;
现在我们用c来写:
#include "so_lib.h"
#include "bsp_rtc.h"
int main(int argc, char** argv)
{
int dev_fd;
dev_fd = rtc_init_time("2017-11-30 21:20:00");
rtc_deinit(dev_fd);
return 0;
}
编译运行下,等会咱们再来看代码;
老规矩先安装库:
install --mode=644 libslhl.so /usr/local/lib/
install --mode=644 libslbsp.so /usr/local/lib/
./source-rtc_test
执行命令查看下rtc的时间是否更新对:
hwclock -r
什么情况怎么多l一个月。
EXPORT int rtc_init_time(const char *dt)
{
int dev_fd = -1;
dev_fd = open_hardware(RTC_PATH, O_RDWR | O_NONBLOCK);
if (dev_fd == -1)
return -1;
if (set_rtc_time(dev_fd, dt) == -1)
return -1;
return dev_fd;
}
/*
使用方法:char *dt = "2017-11-30 18:59:00"
*/
EXPORT int set_rtc_time(int dev_fd, const char *dt)
{
struct rtc_time rtc_tm;
int ret = sscanf(dt, "%d-%d-%d %d:%d:%d", &rtc_tm.tm_year, &rtc_tm.tm_mon, \
&rtc_tm.tm_mday, &rtc_tm.tm_hour, \
&rtc_tm.tm_min, &rtc_tm.tm_sec);
if (ret != 6) {
ERR("Time not match");
return -1;
}
ret = ioctl(dev_fd, RTC_SET_TIME, &rtc_tm);
if (ret == -1) {
ERR("ioctl RTC_RD_TIME");
}
return ret;
}
查看内核代码后发现问题:
mon = rtc_tm.tm_mon + 1; tm_mon starts at zero
修改代码:
EXPORT int set_rtc_time(int dev_fd, const char *dt)
{
struct rtc_time rtc_tm;
int ret = sscanf(dt, "%d-%d-%d %d:%d:%d", &rtc_tm.tm_year, &rtc_tm.tm_mon, \
&rtc_tm.tm_mday, &rtc_tm.tm_hour, \
&rtc_tm.tm_min, &rtc_tm.tm_sec);
if (ret != 6) {
ERR("Time not match");
return -1;
}
rtc_tm.tm_mon -= 1;
ret = ioctl(dev_fd, RTC_SET_TIME, &rtc_tm);
if (ret == -1) {
ERR("ioctl RTC_RD_TIME");
}
return ret;
}