Няшная / Говнокод #25665 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
  31. 31
  32. 32
  33. 33
  34. 34
  35. 35
  36. 36
  37. 37
  38. 38
  39. 39
  40. 40
  41. 41
  42. 42
  43. 43
  44. 44
  45. 45
  46. 46
  47. 47
  48. 48
  49. 49
  50. 50
  51. 51
// 3.7 Position-independent Limitation
// At runtime an MRE program needs to be dynamically loaded into RAM. In other words, the addresses of the variables and functions can be dynamically assigned when they are loaded. This requires that the code be position-independent. If the code needs to determine the addresses at compile time, then it will fail to compile.
// The following code exemplifies this error.
/* 1 */
int a[10], b[10];
struct c {
        int* d;
        int* e;
};
struct c f = {a, b};

/* 2 */
void func1(void) {}
typedef struct struct1 {
int a;
void (*fun)(void);
} struct1;
struct1 array1[1] = {0, func1};

/* 3 */
char *str = "test";
char * list[] = {"zero", "one", "two"};

// The solution is as follows:
/* 1 */
int a[10], b[10];
struct c {
    int* d;
    int* e;
};
struct c f;
void init1(void) {
    f.d = a;
    f.e = b;
}

/* 2 */
void func1(void) {}
typedef struct struct1 {
    int a;
    void (*fun)(void);
} struct1;
struct1 array1[1];
void init2(void) {
    array1[0].a = 0;
    array1[0].fun = func1;
}

/* 3 */
char str[] = "test";
char list[][10] = {"zero", "one", "two"};

MRE Developer FAQ
This document contains information that is proprietary to MediaTek Inc.

Загрузчик программ из MRE не умеет сложные фиксапы, поэтому изменяйте свой код, чтобы в нём не было адресов, которые нужно определять в момент загрузки.

Запостил: PA3yMHblu_nemyx PA3yMHblu_nemyx, (Updated )

Комментарии (12) RSS

Добавить комментарий

Где здесь C++, guest?!

    А не использовать ли нам bbcode?


    8