Info

이 질문은 마감되었습니다. 편집하거나 답변을 올리려면 질문을 다시 여십시오.

error: initializer element is not constant (void (*)(void))​((uint32_t​)&__STACK_​TOP)

조회 수: 1 (최근 30일)
Alberto Prudhomme
Alberto Prudhomme 2016년 4월 20일
댓글: Walter Roberson 2016년 5월 6일
Hello;
I'm using the CCS C code for serial transmit from my Tiva C launchpad.
The C code works fine, but when I pass it to a function block in Simulink by code.ceval, during the debug I receive this error:
:\Users\Alberto\Desktop\startup_ccs.c:71:22: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
(void (*)(void))((uint32_t)&__STACK_TOP),
^
C:\Users\Alberto\Desktop\startup_ccs.c:71:5: error: initializer element is not constant
(void (*)(void))((uint32_t)&__STACK_TOP),
^
C:\Users\Alberto\Desktop\startup_ccs.c:71:5: error: (near initialization for 'g_pfnVectors[0]')
gmake: *** [startup_ccs.obj] Error -1
I can't understand the error, this is my C code of the main:
#include <stdint.h>
#include <stdio.h>
#include <stdbool.h>
#include <math.h>
#include "hw_ints.h"
#include "hw_memmap.h"
#include "debug.h"
#include "fpu.h"
#include "gpio.h"
#include "interrupt.h"
#include "pin_map.h"
#include "rom.h"
#include "sysctl.h"
#include "uart.h"
#define GPIO_PA0_U0RX 0x00000001
#define GPIO_PA1_U0TX 0x00000401
char car[2000];
double u;
void UARTSend2(const uint8_t *pui8Buffer, uint32_t ui32Count);
//*****************************************************************************
// Send a string to the UART.
void UARTSend2(const uint8_t *pui8Buffer, uint32_t ui32Count)
{
while(ui32Count--) // Loop while there are more characters to send.
{
ROM_UARTCharPutNonBlocking(UART0_BASE, *pui8Buffer++); // Write the next character to the UART.
}
}
//*****************************************************************************
// This example demonstrates how to send a string of data to the UART.
int
main(double u)
{
ROM_FPUEnable(); // Enable lazy stacking for interrupt handlers. This allows floating-point
ROM_FPULazyStackingEnable(); // instructions to be used within interrupt handlers, but at the expense of extra stack usage.
ROM_SysCtlClockSet(SYSCTL_SYSDIV_1 | SYSCTL_USE_OSC | SYSCTL_OSC_MAIN | SYSCTL_XTAL_16MHZ); // Set the clocking to run directly from the crystal.
ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF); // Enable the GPIO port that is used for the on-board LED.
ROM_GPIOPinTypeGPIOOutput(GPIO_PORTF_BASE, GPIO_PIN_2); // Enable the GPIO pins for the LED (PF2).
ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_UART0); // Enable the peripherals used by this example.
ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);
ROM_IntMasterEnable(); // Enable processor interrupts.
GPIOPinConfigure(GPIO_PA0_U0RX); // Set GPIO A0 and A1 as UART pins.
GPIOPinConfigure(GPIO_PA1_U0TX);
ROM_GPIOPinTypeUART(GPIO_PORTA_BASE, GPIO_PIN_0 | GPIO_PIN_1);
ROM_UARTConfigSetExpClk(UART0_BASE, ROM_SysCtlClockGet(), 115200, // Configure the UART for 115,200, 8-N-1 operation.
(UART_CONFIG_WLEN_8 | UART_CONFIG_STOP_ONE |
UART_CONFIG_PAR_NONE));
u=1234;
int cont=(log10(u))+6;
sprintf (car,"%.2f\r\n",u);
UARTSend2((uint8_t *) car,cont); // Prompt for text to be entered.
}
And this is the code from the file that receive the error:
...
#pragma DATA_SECTION(g_pfnVectors, ".intvecs")
void (* const g_pfnVectors[])(void) =
{
(void (*)(void))((uint32_t)&__STACK_TOP),
// The initial stack pointer
ResetISR, // The reset handler
NmiSR, // The NMI handler
FaultISR, // The hard fault handler
....
Can you help me to find the solution?
Thanks

답변 (1개)

Venkatachala Sarma
Venkatachala Sarma 2016년 5월 6일
Hi Alberto,
Could you paste your MALTAB coder in the MATLAB Function block here?

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by