コード例 #1
0
ファイル: testOcrLib2.c プロジェクト: ChengduoZhao/ocr
int main(int argc, const char * argv[]) {
    ocrConfig_t ocrConfig;
    ocrParseArgs(argc, argv, &ocrConfig);
    ocrInit(&ocrConfig);

    ocrGuid_t terminateEdtGuid;
    ocrGuid_t terminateEdtTemplateGuid;
    ocrEdtTemplateCreate(&terminateEdtTemplateGuid, terminateEdt, 0 /*paramc*/, 1 /*depc*/);
    ocrEdtCreate(&terminateEdtGuid, terminateEdtTemplateGuid, EDT_PARAM_DEF, /*paramv=*/NULL, EDT_PARAM_DEF, /*depv=*/NULL,
                    /*properties=*/0, NULL_GUID, /*outEvent=*/NULL);

    ocrGuid_t outputEventGuid;
    ocrGuid_t rootEdtGuid;
    ocrGuid_t rootEdtTemplateGuid;
    ocrEdtTemplateCreate(&rootEdtTemplateGuid, rootEdt, 0 /*paramc*/, 0 /*depc*/);
    ocrEdtCreate(&rootEdtGuid, rootEdtTemplateGuid, EDT_PARAM_DEF, /*paramv=*/NULL, EDT_PARAM_DEF, /*depv=*/NULL,
                    /*properties=*/EDT_PROP_FINISH, NULL_GUID, /*outEvent=*/&outputEventGuid);

    // When output-event will be satisfied, the whole task sub-tree
    // spawned by rootEdt will be done, and shutdownEdt is called.
    ocrAddDependence(outputEventGuid, terminateEdtGuid, 0, DB_MODE_RO);

    ocrFinalize();
    return 0;
}
コード例 #2
0
ファイル: helloworld.c プロジェクト: lyyao/ocr
int main (int argc, char ** argv) {
    ocrEdt_t fctPtrArray [1];
    fctPtrArray[0] = &task_for_edt;
    ocrInit(&argc, argv, 1, fctPtrArray);

    // Current thread is '0' and goes on with user code.
    ocrGuid_t event_guid;
    ocrEventCreate(&event_guid, OCR_EVENT_STICKY_T, true);

    // Creates the EDT
    ocrGuid_t edt_guid;

    ocrEdtCreate(&edt_guid, task_for_edt, /*paramc=*/0, /*params=*/ NULL,
                 /*paramv=*/NULL, /*properties=*/0,
                 /*depc=*/1, /*depv=*/NULL);

    // Register a dependence between an event and an edt
    ocrAddDependence(event_guid, edt_guid, 0);
    // Schedule the EDT (will run when dependences satisfied)
    ocrEdtSchedule(edt_guid);

    int *k;
    ocrGuid_t db_guid;
    ocrDbCreate(&db_guid, (void **) &k, sizeof(int), /*flags=*/FLAGS,
                /*location=*/NULL, NO_ALLOC);
    *k = 42;

    ocrEventSatisfy(event_guid, db_guid);

    ocrCleanup();

    return 0;
}
コード例 #3
0
ファイル: testOcrEventParam0.c プロジェクト: lyyao/ocr
int main (int argc, char ** argv) {
    ocrEdt_t fctPtrArray [1];
    fctPtrArray[0] = &task_for_edt;
    ocrInit(&argc, argv, 1, fctPtrArray);

    // Current thread is '0' and goes on with user code.
    ocrGuid_t event_guid;
    ocrEventCreate(&event_guid, OCR_EVENT_STICKY_T, true);

    // Creates the EDT
    u32 paramc = 1;
    u64 params[1];
    params[0] = sizeof(int);
    int * paramv = (int *) malloc(sizeof(int));
    paramv[0] = 32;

    ocrGuid_t edt_guid;
    ocrEdtCreate(&edt_guid, task_for_edt, paramc, params, (void**) &paramv, 0, 1, NULL);

    // Register a dependence between an event and an edt
    ocrAddDependence(event_guid, edt_guid, 0);

    int *k;
    ocrGuid_t db_guid;
    ocrDbCreate(&db_guid,(void **) &k,
            sizeof(int), /*flags=*/FLAGS,
            /*location=*/NULL,
            NO_ALLOC);
    *k = 42;

    ocrEventSatisfy(event_guid, db_guid);

    ocrEdtSchedule(edt_guid);

    ocrCleanup();

    return 0;
}
コード例 #4
0
ファイル: treesum_1level.c プロジェクト: lyyao/ocr
int main (int argc, char ** argv) {
    ocrEdt_t fctPtrArray[2] = {summer, autumn};
    ocrInit(&argc, argv, 2, fctPtrArray); /* No machine description */

    if(argc != 3) {
        printf("Usage %s <num1> <num2>\n", argv[0]);
        return -1;
    }

    /* Create 2 data-blocks */
    ocrGuid_t dbs[2];
    int *data[2];
    int i;
    for(i = 0; i < 2; ++i) {
        ocrDbCreate(&dbs[i], (void**)&data[i], sizeof(int), /*flags=*/0,
                    /*location=*/NULL, NO_ALLOC);
        *(data[i]) = atoi(argv[i+1]);
        printf("Created a data-block with value %d (GUID: 0x%lx)\n", i, (u64)dbs[i]);
    }

    ocrGuid_t summerEdt, autumnEdt;
    ocrGuid_t autumnEvt, summerEvt[3];
    ocrGuid_t summerEvtDbGuid;
    ocrGuid_t *summerEvtDb;

    /* Create final EDT (autumn) */
    ocrEdtCreate(&autumnEdt, autumn, /*paramc=*/0, /*params=*/NULL,
                 /*paramv=*/NULL, /*properties=*/0, /*depc=*/1, /*depv=*/NULL);

    /* Create event */
    ocrEventCreate(&autumnEvt, OCR_EVENT_STICKY_T, true);

    /* Create summer */
    ocrEdtCreate(&summerEdt, summer, /*paramc=*/0, /*params=*/NULL,
                 /*paramv=*/NULL, /*properties=*/0, /*depc=*/3, /*depv=*/NULL);

    /* Create events for summer */
    for(i = 0; i < 3; ++i) {
        ocrEventCreate(&summerEvt[i], OCR_EVENT_STICKY_T, true);
    }

    /* Create data-block containing event */
    ocrDbCreate(&summerEvtDbGuid, (void**)&summerEvtDb, sizeof(ocrGuid_t), /*flags=*/0,
                /*location=*/NULL, NO_ALLOC);
    *summerEvtDb = autumnEvt;

    /* Link up dependencees */
    for(i = 0; i < 3; ++i) {
        ocrAddDependence(summerEvt[i], summerEdt, i);
    }

    ocrAddDependence(autumnEvt, autumnEdt, 0);

    /* "Schedule" EDTs (order does not matter) */
    ocrEdtSchedule(autumnEdt);
    ocrEdtSchedule(summerEdt);

    printf("Done all scheduling, now going to satisfy\n");

    /* Satisfy dependences passing data */
    ocrEventSatisfy(summerEvt[0], dbs[0]);
    ocrEventSatisfy(summerEvt[1], dbs[1]);
    ocrEventSatisfy(summerEvt[2], summerEvtDbGuid);

    /* Finalize */
    ocrCleanup();
    return 0;
}