Я работаю над проектом со встроенным устройством на базе процессора 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, приложение переходит на векторное перехватывание, но указатель инструкции не относится к основному.
С моей точки зрения, есть некоторая ошибка при инициализации функции.Я кое-что прочитал о фиаско статического порядка инициализации, но не знаю, так ли это.Я объявляю функции внутри заголовка, который включен в оба исходных файла.
Я подумал, что это может быть проблемой, связанной с занятостью памяти, и я попытался увеличить размер стека, доступного для приложения.Я также пытался закомментировать часть кода, чтобы достичь стабильного состояния, но ничего не получалось.
Любая подсказка, что я мог бы исследовать?