Skip to content
Snippets Groups Projects
Select Git revision
  • be5606f5bbe5e636df23e51bcb6da75bba037b08
  • master default protected
2 results

ch2_03_testing_toolchain.md

Blame
  • SRP_wcet.h 1.33 KiB
    /*
     * RTFM_wcet.h
     *
     * Henrik Tder
     * Per Lindgren
     *
     */
    
    #include <stm32f401xe.h>
    #include "dwt.h"
    #include <stdint.h>
    
    
    typedef enum
    {
        r1,
        r2,
        j1,
        j2,
        j3
    } elem;
    
    typedef enum
    {
        NOACTION,
        /* Lock */
        L,
        /* Release */
        R,
        /* Start */
        S,
        /* End */
        E
    } action;
    
    typedef struct locks
    {
        /* The DWT counter value */
        uint32_t time;
        /* Which element has been locked */
        elem elem;
        /* If locked or released */
        action action;
    
    } locks;
    
    
    
    int event_count = 0;
    
    /* Create array containing structs of type locks */
    #define MAX_NUM_LOCKS 10
    locks eventlist[MAX_NUM_LOCKS];
    
    #define TRACE_EVENT(event, el)({eventlist[event_count].time = DWT->CYCCNT; eventlist[event_count].action = event; eventlist[event_count].elem = el; event_count+=1;})
    
    
    // #define Ceiling(R)		(R##_Ceiling)
    // #define Code(J)			(J##_Code)
    // #define IRQn(J) 		(J##_IRQn)
    // #define H(X)			((1 << __NVIC_PRIO_BITS)-X)
    #define IRQh(J) 		(J##_IRQh)
    
    // #define BARRIER_LOCK 	{ }
    // #define BARRIER_UNLOCK 	{ }
    #define JOB_REQUEST(J)	{ }
    
    #define LOCK(X) 		TRACE_EVENT(L, X);
    #define UNLOCK(X) 		TRACE_EVENT(R, X);
    
    // #define SETPRIO(J)		{ }
    // #define ENABLE(J)		{ }
    
    #define TASK(J)			void IRQh(J) ()
    
    #define BREAKPOINT      { asm volatile("" ::: "memory"); }
    
    void finish_execution(void) {}
    void terminate_execution(void) {}