0

你好,stackoverflow。

我正在使用带有引导加载程序的 pic 18f4550。

由于引导加载程序,我需要在内存中的指定地址中启动解码。

在这种情况下 0x1000 因为我没有任何中断。

到目前为止,这是我的代码(简单):

#include <p18f4550.h>
#include <delays.h>

#pragma config FOSC = INTOSCIO_EC //Internal oscillator, port function on RA6, EC used by USB 
#pragma config WDT = OFF //Disable watchdog timer

#define LEDPin PORTAbits.RA0 //Define LEDPin as PORT D Pin 1
#define LEDTris TRISDbits.TRISD1 //Define LEDTris as TRISD Pin 1
void main()
{   
    _asm org 1000h
    LEDTris = 0;//Set LED Pin data direction to OUTPUT
    LEDPin = 1;//Set LED Pin

    while(1)
    {
        LEDPin = ~LEDPin;//Toggle LED Pin
        Delay10KTCYx(25);//Delay 250K cycles (1 second at 1MHz since each instruction takes 4 cycles)
    }

}

但!...

C:\Users\User\Documents\ProjectosPIC\testeled\main.c:13:Error: 语法错误

我知道如何解决吗?这是编译器的问题吗??

我正在使用带有 mpasm 和其他语言的微芯片 C18 工具套件的 mplab IDE。

为什么是 sintaxe 错误?

4

2 回答 2

1

如果您有 C 编译器,则无需担心org地址。编译器和/或链接器启动代码会处理这些,然后调用main. 如果这不是真的,你有一个非标准的编译器。

于 2012-08-24T22:08:02.500 回答
0

内联汇编不太可能支持org.

此外,main()这不是将在您的程序中执行的第一段代码。之前将有一段相对较短的代码来初始化硬件、全局变量和可能的 C(++) 标准库main()

因此,这个错误根本不应该让人感到意外。

您需要研究编译器和链接器选项以了解如何指定加载和起始地址。通常,设置此类地址是通过一个特殊的链接器脚本完成的,您将其作为参数传递给编译器或链接器。

查找编译器/链接器及其文件的文档。

于 2012-08-24T21:53:58.330 回答