сбой зависит от компилятора, который происходит перед основным - PullRequest
0 голосов
/ 04 января 2019

Я работаю над проектом со встроенным устройством на базе процессора ARM.Я компилирую следующий код как с GCC, так и с RVCT5

С GCC у меня нет предупреждения компилятора, и программа работает без проблем.

С RVCT5 я неу меня также нет предупреждения компилятора, но программа вылетает в цикле

Я изолировал сбой, но не знаю, как его разрешить.

RVCT5, похоже, не может разрешить адрес функции обратного вызова, котораяМне нужно передать в качестве аргумента функции.

main.c

#include "net_test.h"
void main( int argc, char **argv ) 
{
   printf("TASK1 %p \r\n",&msgTask1); //this is ok
   //printf("TASK2 %p \r\n",&msgTask2); //this crashes
}

net.c

#include "net_test.h"
INT32 msgTask1(INT32 type, INT32 param1, INT32 param2)
{
  //omissis
}

parser.c

#include "net_test.h"
INT32 msgTask2(INT32 type, INT32 param1, INT32 param2)
{
  //omissis
}

net_test.h

INT32 msgTask1(INT32 type, INT32 param1, INT32 param2);
INT32 msgTask2(INT32 type, INT32 param1, INT32 param2);

Если в своем коде я раскомментирую строку, печатающую адрес msgTask2, , программа не сможет даже запустить основной .Это можно продемонстрировать как тем, что я не вижу строки для msgTask1, так и использованием аппаратного отладчика ARM, приложение переходит на векторное перехватывание, но указатель инструкции не относится к основному.

С моей точки зрения, есть некоторая ошибка при инициализации функции.Я кое-что прочитал о фиаско статического порядка инициализации, но не знаю, так ли это.Я объявляю функции внутри заголовка, который включен в оба исходных файла.

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

Любая подсказка, что я мог бы исследовать?

...