QUOTE (Eug28 @ Aug 24 2011, 18:20)

Необходимо из под ecos менять текущее время в BIOSe, не могу найти при помощи какой функции это можно сделать.
Может кто сталкивался, помогите пожалуйста.
Я бы предложил айти исходники драйвера RTC.
И посмотрел, на какие ф-ии он завешивается.
Команда: установить/считать дату из под Redboot
CODE
RedBoot_cmd("date",
"Show/Set the time of day",
"[YYYY/MM/DD HH:MM:SS]",
do_time_date
);
static bool
verify(cyg_uint32 val, int min, int max, char *id)
{
if (((int)val < min) || ((int)val > max)) {
diag_printf("%s is out of range - must be [%d..%d]\n", id, min, max);
return false;
}
return true;
}
void
do_time_date(int argc, char *argv[])
{
cyg_uint32 now = Cyg_WallClock::wallclock->get_current_time();
cyg_uint32 year, month, mday, hour, minute, second;
char *sp;
bool ok = true;
if (argc == 1) {
// Just show the current time/date
_simple_mkdate(now, &year, &month, &mday, &hour, &minute, &second);
diag_printf("%04d/%02d/%02d %02d:%02d:%02d\n",
year, month, mday, hour, minute, second);
} else if (argc == 3) {
sp = argv[1];
if (!parse_num(sp, (unsigned long *)&year, &sp, "/") ||
!parse_num(sp, (unsigned long *)&month, &sp, "/") ||
!parse_num(sp, (unsigned long *)&mday, &sp, "/")) {
ok = false;
}
sp = argv[2];
if (!parse_num(sp, (unsigned long *)&hour, &sp, ":") ||
!parse_num(sp, (unsigned long *)&minute, &sp, ":") ||
!parse_num(sp, (unsigned long *)&second, &sp, ":")) {
ok = false;
}
if (ok) {
// Verify values make some sense, then set the hardware
if (year < 100) year += 2000;
ok = ok && verify(year, 1970, 2034, "year");
ok = ok && verify(month, 1, 12, "month");
ok = ok && verify(mday, 1, 31, "day");
ok = ok && verify(hour, 0, 23, "hour");
ok = ok && verify(minute, 0, 59, "minute");
ok = ok && verify(second, 0, 59, "second");
if (ok) {
now = _simple_mktime(year, month, mday, hour, minute, second);
Cyg_WallClock::wallclock->set_current_time(now);
}
}
} else {
ok = false;
}
if (!ok) {
diag_printf("usage: date [YYYY/MM/DD HH:MM:SS]\n");
}
}