Difference between revisions of "Embedded II/2016 Oktobers"

From Teknologisk videncenter
Jump to: navigation, search
m (Time opgave)
m (Board)
 
(8 intermediate revisions by the same user not shown)
Line 2: Line 2:
 
*[[MCBSTM32C]]
 
*[[MCBSTM32C]]
 
*[http://www.keil.com/pack/doc/CMSIS/General/html/index.html CMSIS Help]
 
*[http://www.keil.com/pack/doc/CMSIS/General/html/index.html CMSIS Help]
 +
*[http://www.keil.com/pack/doc/mw/Network/html/index.html CMSIS Network help]
 +
**NTP server for eksempel 83.90.47.30
  
 
=C=
 
=C=
Line 12: Line 14:
 
*[[:Category:Embedded]]
 
*[[:Category:Embedded]]
 
*[[:Category:Time|Category:Time]]
 
*[[:Category:Time|Category:Time]]
 +
*[https://tools.ietf.org/html/rfc4330 RFC4330 (SNTP)]
 +
*[[STM32F107VC/timer2|Timer 2]]
 
== Kravspec==
 
== Kravspec==
 
*Tæller UNIX tid i RTC
 
*Tæller UNIX tid i RTC
 
** Epoch 1. januar 1970 kl. 00:00
 
** Epoch 1. januar 1970 kl. 00:00
*Kunne omregne mellem UNIX-tid og mennesketid
+
*Kunne omregne mellem UNIX-tid og mennesketid [[Calendar_standards]]
 
**Fra UNIX-tid til mennesketid når tiden skal vises
 
**Fra UNIX-tid til mennesketid når tiden skal vises
 
**Fra mennesketid til UNIX-tid når tiden stilles
 
**Fra mennesketid til UNIX-tid når tiden stilles
*Hente tid fra tids-source fx. NTP eller/og GPS
+
*Hente tid fra tids-source fx. NTP/SNTP eller/og GPS
 +
===Facts===
 +
*Der er 365,2425 dage per år
 +
**Hvert fjerde år er et skudår, med mindre det kan divideres med 100 men ikke 400.
 +
***År 1900 er ikke skudår men år 2000 er!
 +
*UNIX epoch er 1. januar 1970 kl. 00:00. Det var en torsdag
 +
*Der skal ikke tages hensyn til skudsekunder i dette projekt.
 +
**UNIX epoch er en 32 bit signed integer. Posetive tal er efter 1970 og negative tal før 1970
 +
*Et skudår har en ekstra dag i februar. (29 februar)
 +
===Lidt inspiration===
 +
 
 +
 
 +
I et ikke skudår har hver måned disse antal dage
 +
<source lang=c>
 +
//Days in normal year, jan,feb .. dec (Not leap year)
 +
uint8_t const daysmd[12] =  {31,28,31,30,31,30,31,31,30,31,30,31};
 +
</source>
 +
 
 +
Et eksempel på en total tidsstruktur
 +
<source lang=c>
 +
struct TimeStruct {
 +
        uint32_t    epoch;      // Seconds since 1. jan 1970 00:00:00
 +
        uint32_t    tz;        // Timezone +/- x seconds from GMT
 +
        uint32_t    year;      // year                1970 to 2106
 +
        uint32_t    sec;        // seconds                          00 to 59
 +
        uint32_t    min;        // minutes                          00 to 59
 +
        uint32_t    hour;      // hours                            00 to 23
 +
        uint32_t    mday;      // day of the month        1 to 31
 +
        uint32_t    mon;        // month                            0 to 11
 +
        uint32_t    wday;      // day of the week          0=sunday, 1=monday...
 +
        uint32_t    isdst;      // is Daylight Saving Time (DST)
 +
                                // isdst: 0 = not dst 1 = dst  2=Not used
 +
        uint32_t    dstOnMon;  // Month (0-11) when DST starts
 +
        uint32_t    dstOnMday;  // Day of month when DST starts
 +
        uint32_t    dstOnHour;  // Hour of the day when DST starts
 +
        uint32_t    dstOnMin;  // Minute of the hour when DST starts
 +
        uint32_t    dstOffMon;  // Month (0-11) when DST ends
 +
        uint32_t    dstOffMday; // Day of month when DST ends
 +
        uint32_t    dstOffHour; // Hour of the day when DST ends
 +
        uint32_t    dstOffMin;  // Minute of the hour when DST ends
 +
};
 +
</source>
 +
 
 +
[[Category:Embedded]]

Latest revision as of 11:59, 11 October 2016

Board

C

Tids opgave

Kravspec

  • Tæller UNIX tid i RTC
    • Epoch 1. januar 1970 kl. 00:00
  • Kunne omregne mellem UNIX-tid og mennesketid Calendar_standards
    • Fra UNIX-tid til mennesketid når tiden skal vises
    • Fra mennesketid til UNIX-tid når tiden stilles
  • Hente tid fra tids-source fx. NTP/SNTP eller/og GPS

Facts

  • Der er 365,2425 dage per år
    • Hvert fjerde år er et skudår, med mindre det kan divideres med 100 men ikke 400.
      • År 1900 er ikke skudår men år 2000 er!
  • UNIX epoch er 1. januar 1970 kl. 00:00. Det var en torsdag
  • Der skal ikke tages hensyn til skudsekunder i dette projekt.
    • UNIX epoch er en 32 bit signed integer. Posetive tal er efter 1970 og negative tal før 1970
  • Et skudår har en ekstra dag i februar. (29 februar)

Lidt inspiration

I et ikke skudår har hver måned disse antal dage

//Days in normal year, jan,feb .. dec (Not leap year)
uint8_t const daysmd[12] =  {31,28,31,30,31,30,31,31,30,31,30,31};

Et eksempel på en total tidsstruktur

struct TimeStruct {
        uint32_t     epoch;      // Seconds since 1. jan 1970 00:00:00
        uint32_t     tz;         // Timezone +/- x seconds from GMT
        uint32_t     year;       // year                 1970 to 2106
        uint32_t     sec;        // seconds                          00 to 59
        uint32_t     min;        // minutes                          00 to 59
        uint32_t     hour;       // hours                            00 to 23
        uint32_t     mday;       // day of the month         1 to 31
        uint32_t     mon;        // month                            0 to 11
        uint32_t     wday;       // day of the week          0=sunday, 1=monday...
        uint32_t     isdst;      // is Daylight Saving Time (DST)
                                 // isdst: 0 = not dst 1 = dst  2=Not used
        uint32_t     dstOnMon;   // Month (0-11) when DST starts
        uint32_t     dstOnMday;  // Day of month when DST starts
        uint32_t     dstOnHour;  // Hour of the day when DST starts
        uint32_t     dstOnMin;   // Minute of the hour when DST starts
        uint32_t     dstOffMon;  // Month (0-11) when DST ends
        uint32_t     dstOffMday; // Day of month when DST ends
        uint32_t     dstOffHour; // Hour of the day when DST ends
        uint32_t     dstOffMin;  // Minute of the hour when DST ends
};