主頁 > 軟體工程 > 正確LDRRd,=constant_expression在GCC/GAS中的用法?

正確LDRRd,=constant_expression在GCC/GAS中的用法?

2022-10-12 15:52:51 軟體工程

我正在使用 GNU arm-none-eabi 工具鏈從 Ride7 遷移到 Eclipse CDT。

在我的專案中,我有一個使用 .equ 指令的硬體暫存器描述庫,其方式如下:

.equ BIT_31, 1 << 31
.equ BIT_30, 1 << 30
and so on up to
.equ BIT_0,  1 << 0

我想準備一個掩碼來清除例如位 30、27、25 和 5。
在 Ride7 中使用偽指令沒有問題

ldr r0, =~(BIT_30 | BIT_27 | BIT_25 | BIT_5)

這會在池中的某處生成一個常量,并生成LDR r0, [pc, #IMM], 或 MOV/MVN 指令(如果是好的常量)。

但是 GNU 工具鏈拒絕評估產生語法錯誤的常量運算式。(我只能使用ldr r0, =BIT_30示例)。

誰能告訴我如何解決這個問題?

后來補充:

專案中有幾個檔案,包含在主檔案中。以下是最小化的串列:

電源:

.syntax unified
.text

.include "defs_swintf.inc"             @ software interface
.include "defs_md.inc"                 @ hardware interface

/***
* Startup
***/
_start:
    .include "startup.S"

/***
* Core
***/

/***
* removed to minimalize
***/
    
/***
* CPU Init
***/
.align 4
Init_CPU: 
    ldr r0, =Init_stack
    mov sp, r0
    bl Set_RESULT_WAIT
    bl Configure_clocks
    ldr r1, =RESULT_OK
    bkpt                                @ halt
    
    .include "procedures.S"
    
.end

啟動.S:

.syntax unified
.text

    .word Init_stack                        @ stack pointer
    .word Reset_handler 1                   @ Reset
    .word Default_handler 1                 @ NMI
    .word Default_handler 1                 @ Hardfault
    
Reset_handler:
    b Init_CPU

Default_handler:
    bl Set_RESULT_ERROR
    bkpt                                    @ halt

程式.S

.syntax unified
.text

/*******************************************************************************
* Configure_clocks
*******************************************************************************/
Configure_clocks:
    push {LR}

        ldr r0, =RCC_CR
        ldr r1, [r0]
        ldr r2, =RCC_CR_HSION_mask
        orr r1, r1, r2
        str r1, [r0]
        ldr r3, =RCC_CFGR
        ldr r4, [r3]
        ldr r2, = ~(RCC_CFGR_HPRE_mask | RCC_CFGR_PPRE1_mask | RCC_CFGR_PPRE2_mask | RCC_CFGR_ADCPRE_mask | RCC_CFGR_MCO_mask)
        and r4, r4, r2
        str r4, [r3]
        ldr r2, = ~RCC_CR_CSSON_mask
        and r1, r1, r2
        str r1, [r0]
        ldr r5, =RCC_CIR
        ldr r2, =RCC_CIR_clearAll
        str r2, [r5]
        ldr r2, =RCC_CR_HSIRDY_mask

    pop {pc}

defs_swintf.inc

/***
* operation results
***/

.equ    RESULT_OK,     0x89abcdef
.equ    RESULT_BAD,    0x4321fedc
.equ    RESULT_WAIT,   0x12345678
.equ    RESULT_ERROR,  0x9876dcba

defs_md.inc

    .equ Init_stack, 0x20005000         /* initial stack */

/***
* device registers
***/

/******************************************************************************/
/* Reequ and Clock Control Registers                                          */
/******************************************************************************/
    .equ RCC_base, 0x40021000
    .equ RCC_CR, RCC_base   0x00        /* Clock control register             */
    .equ RCC_CR_reequ, 0x00000083
        .equ RCC_CR_HSION_mask,         0x01 << 0
        .equ RCC_CR_HSIRDY_mask,        0x01 << 1
        .equ RCC_CR_HSITRIM_mask,       0x1f << 3
        .equ RCC_CR_HSICAL_mask,        0xff << 8
        .equ RCC_CR_HSEON_mask,         0x01 << 16
        .equ RCC_CR_HSERDY_mask,        0x01 << 17
        .equ RCC_CR_HSEBYP_mask,        0x01 << 18
        .equ RCC_CR_CSSON_mask,         0x01 << 19
        .equ RCC_CR_PLLON_mask,         0x01 << 24
        .equ RCC_CR_PLLRDY_mask,        0x01 << 25
    
    .equ RCC_CFGR, RCC_base   0x04      /* Clock configuration register       */
    .equ RCC_CFGR_reequ, 0x00000000
        .equ RCC_CFGR_SW_mask,          0x03 << 0
        .equ RCC_CFGR_SW_hsi,           0x00 << 0
        .equ RCC_CFGR_SW_hse,           0x01 << 0
        .equ RCC_CFGR_SW_pll,           0x02 << 0
        
        .equ RCC_CFGR_SWS_mask,         0x03 << 2
        .equ RCC_CFGR_SWS_hsi,          0x00 << 2
        .equ RCC_CFGR_SWS_hse,          0x01 << 2
        .equ RCC_CFGR_SWS_pll,          0x02 << 2
        
        .equ RCC_CFGR_HPRE_mask,        0x0f << 4
        .equ RCC_CFGR_HPRE_div1,        0x00 << 4
        .equ RCC_CFGR_HPRE_div2,        0x08 << 4
        .equ RCC_CFGR_HPRE_div4,        0x09 << 4
        .equ RCC_CFGR_HPRE_div8,        0x0a << 4
        .equ RCC_CFGR_HPRE_div16,       0x0b << 4
        .equ RCC_CFGR_HPRE_div64,       0x0c << 4
        .equ RCC_CFGR_HPRE_div128,      0x0d << 4
        .equ RCC_CFGR_HPRE_div256,      0x0e << 4
        .equ RCC_CFGR_HPRE_div512,      0x0f << 4
        
        .equ RCC_CFGR_PPRE1_mask,       0x07 << 8
        .equ RCC_CFGR_PPRE1_div1,       0x00 << 8
        .equ RCC_CFGR_PPRE1_div2,       0x04 << 8
        .equ RCC_CFGR_PPRE1_div4,       0x05 << 8
        .equ RCC_CFGR_PPRE1_div8,       0x06 << 8
        .equ RCC_CFGR_PPRE1_div16,      0x07 << 8
        
        .equ RCC_CFGR_PPRE2_mask,       0x07 << 11
        .equ RCC_CFGR_PPRE2_div1,       0x00 << 11
        .equ RCC_CFGR_PPRE2_div2,       0x04 << 11
        .equ RCC_CFGR_PPRE2_div4,       0x05 << 11
        .equ RCC_CFGR_PPRE2_div8,       0x06 << 11
        .equ RCC_CFGR_PPRE2_div16,      0x07 << 11
        
        .equ RCC_CFGR_ADCPRE_mask,      0x03 << 14
        .equ RCC_CFGR_ADCPRE_div2,      0x00 << 14
        .equ RCC_CFGR_ADCPRE_div4,      0x01 << 14
        .equ RCC_CFGR_ADCPRE_div6,      0x02 << 14
        .equ RCC_CFGR_ADCPRE_div8,      0x03 << 14
        
        .equ RCC_CFGR_PLLSRC_mask,      0x01 << 16
        .equ RCC_CFGR_PLLSRC_hsiDiv2,   0x00 << 16
        .equ RCC_CFGR_PLLSRC_hse,       0x01 << 16
        
        .equ RCC_CFGR_PLLXTPRE_mask,    0x01 << 17
        .equ RCC_CFGR_PLLXTPRE_hse,     0x00 << 17
        .equ RCC_CFGR_PLLXTPRE_hseDiv2, 0x01 << 17
        
        .equ RCC_CFGR_PLLMUL_mask,      0x0f << 18
        .equ RCC_CFGR_PLLMUL_x2,        0x00 << 18
        .equ RCC_CFGR_PLLMUL_x3,        0x01 << 18
        .equ RCC_CFGR_PLLMUL_x4,        0x02 << 18
        .equ RCC_CFGR_PLLMUL_x5,        0x03 << 18
        .equ RCC_CFGR_PLLMUL_x6,        0x04 << 18
        .equ RCC_CFGR_PLLMUL_x7,        0x05 << 18
        .equ RCC_CFGR_PLLMUL_x8,        0x06 << 18
        .equ RCC_CFGR_PLLMUL_x9,        0x07 << 18
        .equ RCC_CFGR_PLLMUL_x10,       0x08 << 18
        .equ RCC_CFGR_PLLMUL_x11,       0x09 << 18
        .equ RCC_CFGR_PLLMUL_x12,       0x0a << 18
        .equ RCC_CFGR_PLLMUL_x13,       0x0b << 18
        .equ RCC_CFGR_PLLMUL_x14,       0x0c << 18
        .equ RCC_CFGR_PLLMUL_x15,       0x0d << 18
        .equ RCC_CFGR_PLLMUL_x16,       0x0e << 18
        
        .equ RCC_CFGR_USBPRE_mask,      0x01 << 22
        .equ RCC_CFGR_USBPRE_div1_5,    0x00 << 22
        .equ RCC_CFGR_USBPRE_div1,      0x01 << 22
        
        .equ RCC_CFGR_MCO_mask,         0x07 << 24
        .equ RCC_CFGR_MCO_off,          0x00 << 24
        .equ RCC_CFGR_MCO_sysclk,       0x04 << 24
        .equ RCC_CFGR_MCO_hsi,          0x05 << 24
        .equ RCC_CFGR_MCO_hse,          0x06 << 24
        .equ RCC_CFGR_MCO_pllDiv2,      0x07 << 24
    
    .equ RCC_CIR, RCC_base   0x08       /* Clock interrupt register           */
    .equ RCC_CIR_reequ, 0x00000000
    .equ RCC_CIR_clearAll, 0x009f0000
        .equ RCC_CIR_LSIRDYF_mask,      0x01 << 0
        .equ RCC_CIR_LSERDYF_mask,      0x01 << 1
        .equ RCC_CIR_HSIRDYF_mask,      0x01 << 2
        .equ RCC_CIR_HSERDYF_mask,      0x01 << 3
        .equ RCC_CIR_PLLRDYF_mask,      0x01 << 4
        .equ RCC_CIR_CSSF_mask,         0x01 << 7
        .equ RCC_CIR_LSIRDYIE_mask,     0x01 << 8
        .equ RCC_CIR_LSERDYIE_mask,     0x01 << 9
        .equ RCC_CIR_HSIRDYIE_mask,     0x01 << 10
        .equ RCC_CIR_HSERDYIE_mask,     0x01 << 11
        .equ RCC_CIR_PLLRDYIE_mask,     0x01 << 12
        .equ RCC_CIR_LSIRDYC_mask,      0x01 << 16
        .equ RCC_CIR_LSERDYC_mask,      0x01 << 17
        .equ RCC_CIR_HSIRDYC_mask,      0x01 << 18
        .equ RCC_CIR_HSERDYC_mask,      0x01 << 19
        .equ RCC_CIR_PLLRDYC_mask,      0x01 << 20
        .equ RCC_CIR_CSSC_mask,         0x01 << 23
    
    .equ RCC_APB2RSTR, RCC_base   0x0c  /* APB2 peripheral reequ register     */
    .equ RCC_APB2RSTR_reequ, 0x00000000
        .equ RCC_APB2RSTR_AFIORST_mask,     0x01 << 0
        .equ RCC_APB2RSTR_IOPARST_mask,     0x01 << 2
        .equ RCC_APB2RSTR_IOPBRST_mask,     0x01 << 3
        .equ RCC_APB2RSTR_IOPCRST_mask,     0x01 << 4
        .equ RCC_APB2RSTR_IOPDRST_mask,     0x01 << 5
        .equ RCC_APB2RSTR_IOPERST_mask,     0x01 << 6
        .equ RCC_APB2RSTR_IOPFRST_mask,     0x01 << 7
        .equ RCC_APB2RSTR_IOPGRST_mask,     0x01 << 8
        .equ RCC_APB2RSTR_ADC1RST_mask,     0x01 << 9
        .equ RCC_APB2RSTR_ADC2RST_mask,     0x01 << 10
        .equ RCC_APB2RSTR_TIM1RST_mask,     0x01 << 11
        .equ RCC_APB2RSTR_SPI1RST_mask,     0x01 << 12
        .equ RCC_APB2RSTR_TIM8RST_mask,     0x01 << 13
        .equ RCC_APB2RSTR_USART1RST_mask,   0x01 << 14
        .equ RCC_APB2RSTR_ADC3RST_mask,     0x01 << 15
        .equ RCC_APB2RSTR_TIM9RST_mask,     0x01 << 19
        .equ RCC_APB2RSTR_TIM10RST_mask,    0x01 << 20
        .equ RCC_APB2RSTR_TIM11RST_mask,    0x01 << 21
    
    .equ RCC_APB1RSTR, RCC_base   0x10  /* APB1 peripheral reequ register     */
    .equ RCC_APB1RSTR_reequ, 0x00000000
      .equ RCC_APB1RSTR_TIM2RST_mask,       0x01 << 0
      .equ RCC_APB1RSTR_TIM3RST_mask,       0x01 << 1
      .equ RCC_APB1RSTR_TIM4RST_mask,       0x01 << 2
      .equ RCC_APB1RSTR_TIM5RST_mask,       0x01 << 3
      .equ RCC_APB1RSTR_TIM6RST_mask,       0x01 << 4
      .equ RCC_APB1RSTR_TIM7RST_mask,       0x01 << 5
      .equ RCC_APB1RSTR_TIM12RST_mask,      0x01 << 6
      .equ RCC_APB1RSTR_TIM13RST_mask,      0x01 << 7
      .equ RCC_APB1RSTR_TIM14RST_mask,      0x01 << 8
      .equ RCC_APB1RSTR_WWDGRST_mask,       0x01 << 11
      .equ RCC_APB1RSTR_SPI2RST_mask,       0x01 << 14
      .equ RCC_APB1RSTR_SPI3RST_mask,       0x01 << 15
      .equ RCC_APB1RSTR_USART2RST_mask,     0x01 << 17
      .equ RCC_APB1RSTR_USART3RST_mask,     0x01 << 18
      .equ RCC_APB1RSTR_USART4RST_mask,     0x01 << 19
      .equ RCC_APB1RSTR_USART5RST_mask,     0x01 << 20
      .equ RCC_APB1RSTR_I2C1RST_mask,       0x01 << 21
      .equ RCC_APB1RSTR_I2C2RST_mask,       0x01 << 22
      .equ RCC_APB1RSTR_USBRST_mask,        0x01 << 23
      .equ RCC_APB1RSTR_CANRST_mask,        0x01 << 25
      .equ RCC_APB1RSTR_BKPRST_mask,        0x01 << 27
      .equ RCC_APB1RSTR_PWRRST_mask,        0x01 << 28
      .equ RCC_APB1RSTR_DACRST_mask,        0x01 << 29
    
    .equ RCC_AHBENR, RCC_base   0x14    /* AHB peripheral clock enable rgr.   */
    .equ RCC_AHBENR_reequ, 0x00000014
        .equ RCC_AHBENR_DMA1EN_mask,        0x01 << 0
        .equ RCC_AHBENR_DMA2EN_mask,        0x01 << 1
        .equ RCC_AHBENR_SRAMEN_mask,        0x01 << 2
        .equ RCC_AHBENR_FLITFEN_mask,       0x01 << 4
        .equ RCC_AHBENR_CRCEN_mask,         0x01 << 6
        .equ RCC_AHBENR_FSMCEN_mask,        0x01 << 8
        .equ RCC_AHBENR_SDIOEN_mask,        0x01 << 10
    
    .equ RCC_APB2ENR, RCC_base   0x18   /* APB2 peripheral clock enable rgr.  */
    .equ RCC_APB2ENR_reequ, 0x00000000
        .equ RCC_APB2ENR_AFIOEN_mask,       0x01 << 0
        .equ RCC_APB2ENR_IOPAEN_mask,       0x01 << 2
        .equ RCC_APB2ENR_IOPBEN_mask,       0x01 << 3
        .equ RCC_APB2ENR_IOPCEN_mask,       0x01 << 4
        .equ RCC_APB2ENR_IOPDEN_mask,       0x01 << 5
        .equ RCC_APB2ENR_IOPEEN_mask,       0x01 << 6
        .equ RCC_APB2ENR_IOPFEN_mask,       0x01 << 7
        .equ RCC_APB2ENR_IOPGEN_mask,       0x01 << 8
        .equ RCC_APB2ENR_ADC1EN_mask,       0x01 << 9
        .equ RCC_APB2ENR_ADC2EN_mask,       0x01 << 10
        .equ RCC_APB2ENR_TIM1EN_mask,       0x01 << 11
        .equ RCC_APB2ENR_SPI1EN_mask,       0x01 << 12
        .equ RCC_APB2ENR_TIM8EN_mask,       0x01 << 13
        .equ RCC_APB2ENR_USART1EN_mask,     0x01 << 14
        .equ RCC_APB2ENR_ADC3EN_mask,       0x01 << 15
        .equ RCC_APB2ENR_TIM9EN_mask,       0x01 << 19
        .equ RCC_APB2ENR_TIM10EN_mask,      0x01 << 20
        .equ RCC_APB2ENR_TIM11EN_mask,      0x01 << 21
    
    .equ RCC_APB1ENR, RCC_base   0x1c   /* APB1 peripheral clock enable rgr.  */
    .equ RCC_APB1ENR_reequ, 0x00000000
        .equ RCC_APB1ENR_TIM2EN_mask,       0x01 << 0
        .equ RCC_APB1ENR_TIM3EN_mask,       0x01 << 1
        .equ RCC_APB1ENR_TIM4EN_mask,       0x01 << 2
        .equ RCC_APB1ENR_TIM5EN_mask,       0x01 << 3
        .equ RCC_APB1ENR_TIM6EN_mask,       0x01 << 4
        .equ RCC_APB1ENR_TIM7EN_mask,       0x01 << 5
        .equ RCC_APB1ENR_TIM12EN_mask,      0x01 << 6
        .equ RCC_APB1ENR_TIM13EN_mask,      0x01 << 7
        .equ RCC_APB1ENR_TIM14EN_mask,      0x01 << 8
        .equ RCC_APB1ENR_WWDGEN_mask,       0x01 << 11
        .equ RCC_APB1ENR_SPI2EN_mask,       0x01 << 14
        .equ RCC_APB1ENR_SPI3EN_mask,       0x01 << 15
        .equ RCC_APB1ENR_USART2EN_mask,     0x01 << 17
        .equ RCC_APB1ENR_USART3EN_mask,     0x01 << 18
        .equ RCC_APB1ENR_USART4EN_mask,     0x01 << 19
        .equ RCC_APB1ENR_USART5EN_mask,     0x01 << 20
        .equ RCC_APB1ENR_I2C1EN_mask,       0x01 << 21
        .equ RCC_APB1ENR_I2C2EN_mask,       0x01 << 22
        .equ RCC_APB1ENR_USBEN_mask,        0x01 << 23
        .equ RCC_APB1ENR_CANEN_mask,        0x01 << 25
        .equ RCC_APB1ENR_BKPEN_mask,        0x01 << 27
        .equ RCC_APB1ENR_PWREN_mask,        0x01 << 28
        .equ RCC_APB1ENR_DACEN_mask,        0x01 << 29
    
    .equ RCC_BDCR, RCC_base   0x20      /* Backup domain control register     */
    .equ RCC_BDCR_reequ, 0x00000000
      .equ RCC_BDCR_LSEON_mask,             0x01 << 0
      .equ RCC_BDCR_LSERDY_mask,            0x01 << 1
      .equ RCC_BDCR_LSEBYP_mask,            0x01 << 2
      
      .equ RCC_BDCR_RTCSEL_mask,            0x03 << 8
      .equ RCC_BDCR_RTCSEL_noClock,         0x00
      .equ RCC_BDCR_RTCSEL_lse,             0x01 << 8
      .equ RCC_BDCR_RTCSEL_lsi,             0x02 << 8
      .equ RCC_BDCR_RTCSEL_hse,             0x03 << 8
      
      .equ RCC_BDCR_RTCEN_mask,             0x01 << 15
      .equ RCC_BDCR_BDRST_mask,             0x01 << 16
    
    .equ RCC_CSR, RCC_base   0x24       /* Control/status register            */
    .equ RCC_CSR_reequ, 0x0C000000
        .equ RCC_CSR_LSION_mask,            0x01 << 0
        .equ RCC_CSR_LSIRDY_mask,           0x01 << 1
        .equ RCC_CSR_RMVF_mask,             0x01 << 24
        .equ RCC_CSR_PINRSTF_mask,          0x01 << 26
        .equ RCC_CSR_PORRSTF_mask,          0x01 << 27
        .equ RCC_CSR_SFTRSTF_mask,          0x01 << 28
        .equ RCC_CSR_IWDGRSTF_mask,         0x01 << 29
        .equ RCC_CSR_WWDGRSTF_mask,         0x01 << 30
        .equ RCC_CSR_LPWRRSTF_mask,         0x01 << 31

最后,控制臺輸出:

11:43:02 **** Incremental Build of configuration Debug for project minimal ****
make all 
Building file: ../src/main.S
Invoking: GNU Arm Cross Assembler
arm-none-eabi-gcc -mcpu=cortex-m3 -mthumb -O0 -fmessage-length=0 -fsigned-char -ffunction-sections -fdata-sections  -g3 -x assembler-with-cpp -I"E:\_ARM_workspace2\minimal\src" -I"E:\_ARM_workspace2\minimal\inc" -Wa,-adhlns="src/main.o.lst" --save-temps -v -MMD -MP -MF"src/main.d" -MT"src/main.o" -c -o "src/main.o" "../src/main.S"
Using built-in specs.
COLLECT_AS_OPTIONS='-adhlns=src/main.o.lst'
COLLECT_GCC=arm-none-eabi-gcc
Target: arm-none-eabi
Configured with: /Host/home/ilg/Work/arm-none-eabi-gcc-11.3.1-1.1/win32-x64/sources/gcc/configure --prefix=/Host/home/ilg/Work/arm-none-eabi-gcc-11.3.1-1.1/win32-x64/install/arm-none-eabi-gcc --prefix=/Host/home/ilg/Work/arm-none-eabi-gcc-11.3.1-1.1/win32-x64/install/arm-none-eabi-gcc --infodir=/Host/home/ilg/Work/arm-none-eabi-gcc-11.3.1-1.1/win32-x64/install/arm-none-eabi-gcc/share/doc/info --mandir=/Host/home/ilg/Work/arm-none-eabi-gcc-11.3.1-1.1/win32-x64/install/arm-none-eabi-gcc/share/doc/man --htmldir=/Host/home/ilg/Work/arm-none-eabi-gcc-11.3.1-1.1/win32-x64/install/arm-none-eabi-gcc/share/doc/html --pdfdir=/Host/home/ilg/Work/arm-none-eabi-gcc-11.3.1-1.1/win32-x64/install/arm-none-eabi-gcc/share/doc/pdf --build=x86_64-pc-linux-gnu --host=x86_64-w64-mingw32 --target=arm-none-eabi --disable-libgomp --disable-libmudflap --disable-libquadmath --disable-libsanitizer --disable-libssp --disable-nls --disable-shared --disable-threads --disable-tls --enable-checking=release --enable-languages=c,c  ,fortran --enable-mingw-wildcard --with-gmp=/Host/home/ilg/Work/arm-none-eabi-gcc-11.3.1-1.1/win32-x64/install/libs --with-newlib --with-pkgversion='xPack GNU Arm Embedded GCC x86_64' --with-gnu-as --with-gnu-ld --with-system-zlib --with-sysroot=/Host/home/ilg/Work/arm-none-eabi-gcc-11.3.1-1.1/win32-x64/install/arm-none-eabi-gcc/arm-none-eabi --with-native-system-header-dir=/include --disable-libatomic --enable-multilib --with-multilib-list=aprofile,rmprofile
Thread model: single
Supported LTO compression algorithms: zlib
gcc version 11.3.1 20220712 (xPack GNU Arm Embedded GCC x86_64) 
COLLECT_GCC_OPTIONS='-mcpu=cortex-m3' '-mthumb' '-O0' '-fmessage-length=0' '-fsigned-char' '-ffunction-sections' '-fdata-sections' '-g3' '-I' 'E:\_ARM_workspace2\minimal\src' '-I' 'E:\_ARM_workspace2\minimal\inc' '-save-temps' '-v' '-MMD' '-MP' '-MF' 'src/main.d' '-MT' 'src/main.o' '-c' '-o' 'src/main.o' '-mfloat-abi=soft' '-mlibarch=armv7-m' '-march=armv7-m' '-dumpdir' 'src/'
 c:/program files/eclipse/toolchains/arm-none-eabi/bin/../libexec/gcc/arm-none-eabi/11.3.1/cc1.exe -E -lang-asm -quiet -v -I E:\_ARM_workspace2\minimal\src -I E:\_ARM_workspace2\minimal\inc -imultilib thumb/v7-m/nofp -iprefix c:\program files\eclipse\toolchains\arm-none-eabi\bin\../lib/gcc/arm-none-eabi/11.3.1/ -isysroot c:\program files\eclipse\toolchains\arm-none-eabi\bin\../arm-none-eabi -MMD src/main.d -MF src/main.d -MP -MT src/main.o -dD -D__USES_INITFINI__ ../src/main.S -mcpu=cortex-m3 -mthumb -mfloat-abi=soft -mlibarch=armv7-m -march=armv7-m -fmessage-length=0 -fsigned-char -ffunction-sections -fdata-sections -g3 -fworking-directory -O0 -fpch-preprocess -fno-directives-only -o src/main.s
ignoring duplicate directory "c:/program files/eclipse/toolchains/arm-none-eabi/lib/gcc/../../lib/gcc/arm-none-eabi/11.3.1/include"
ignoring nonexistent directory "c:\program files\eclipse\toolchains\arm-none-eabi\bin\../arm-none-eabi/Host/home/ilg/Work/arm-none-eabi-gcc-11.3.1-1.1/win32-x64/install/arm-none-eabi-gcc/lib/gcc/arm-none-eabi/11.3.1/../../../../include"
ignoring duplicate directory "c:/program files/eclipse/toolchains/arm-none-eabi/lib/gcc/../../lib/gcc/arm-none-eabi/11.3.1/include-fixed"
ignoring duplicate directory "c:/program files/eclipse/toolchains/arm-none-eabi/lib/gcc/../../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/include"
ignoring duplicate directory "c:\program files\eclipse\toolchains\arm-none-eabi\bin\../arm-none-eabi/include"
#include "..." search starts here:
#include <...> search starts here:
 E:\_ARM_workspace2\minimal\src
 E:\_ARM_workspace2\minimal\inc
 c:\program files\eclipse\toolchains\arm-none-eabi\bin\../lib/gcc/arm-none-eabi/11.3.1/include
 c:\program files\eclipse\toolchains\arm-none-eabi\bin\../lib/gcc/arm-none-eabi/11.3.1/include-fixed
 c:\program files\eclipse\toolchains\arm-none-eabi\bin\../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/include
End of search list.
COLLECT_GCC_OPTIONS='-mcpu=cortex-m3' '-mthumb' '-O0' '-fmessage-length=0' '-fsigned-char' '-ffunction-sections' '-fdata-sections' '-g3' '-I' 'E:\_ARM_workspace2\minimal\src' '-I' 'E:\_ARM_workspace2\minimal\inc' '-save-temps' '-v' '-MMD' '-MP' '-MF' 'src/main.d' '-MT' 'src/main.o' '-c' '-o' 'src/main.o' '-mfloat-abi=soft' '-mlibarch=armv7-m' '-march=armv7-m' '-dumpdir' 'src/'
 c:/program files/eclipse/toolchains/arm-none-eabi/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/bin/as.exe --gdwarf-5 -v -I E:\_ARM_workspace2\minimal\src -I E:\_ARM_workspace2\minimal\inc -march=armv7-m -mfloat-abi=soft -meabi=5 -adhlns=src/main.o.lst -o src/main.o src/main.s
GNU assembler version 2.38 (arm-none-eabi) using BFD version (xPack GNU Arm Embedded GCC x86_64) 2.38.20220708
COMPILER_PATH=c:/program files/eclipse/toolchains/arm-none-eabi/bin/../libexec/gcc/arm-none-eabi/11.3.1/;c:/program files/eclipse/toolchains/arm-none-eabi/bin/../libexec/gcc/;c:/program files/eclipse/toolchains/arm-none-eabi/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/bin/
LIBRARY_PATH=c:/program files/eclipse/toolchains/arm-none-eabi/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v7-m/nofp/;c:/program files/eclipse/toolchains/arm-none-eabi/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp/;c:/program files/eclipse/toolchains/arm-none-eabi/bin/../arm-none-eabi/lib/thumb/v7-m/nofp/;c:/program files/eclipse/toolchains/arm-none-eabi/bin/../lib/gcc/arm-none-eabi/11.3.1/;c:/program files/eclipse/toolchains/arm-none-eabi/bin/../lib/gcc/;c:/program files/eclipse/toolchains/arm-none-eabi/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/;c:/program files/eclipse/toolchains/arm-none-eabi/bin/../arm-none-eabi/lib/
COLLECT_GCC_OPTIONS='-mcpu=cortex-m3' '-mthumb' '-O0' '-fmessage-length=0' '-fsigned-char' '-ffunction-sections' '-fdata-sections' '-g3' '-I' 'E:\_ARM_workspace2\minimal\src' '-I' 'E:\_ARM_workspace2\minimal\inc' '-save-temps' '-v' '-MMD' '-MP' '-MF' 'src/main.d' '-MT' 'src/main.o' '-c' '-o' 'src/main.o' '-mfloat-abi=soft' '-mlibarch=armv7-m' '-march=armv7-m' '-dumpdir' 'src/main.'
Finished building: ../src/main.S
 
Building file: ../src/procedures.S
Invoking: GNU Arm Cross Assembler
arm-none-eabi-gcc -mcpu=cortex-m3 -mthumb -O0 -fmessage-length=0 -fsigned-char -ffunction-sections -fdata-sections  -g3 -x assembler-with-cpp -I"E:\_ARM_workspace2\minimal\src" -I"E:\_ARM_workspace2\minimal\inc" -Wa,-adhlns="src/procedures.o.lst" --save-temps -v -MMD -MP -MF"src/procedures.d" -MT"src/procedures.o" -c -o "src/procedures.o" "../src/procedures.S"
Using built-in specs.
COLLECT_AS_OPTIONS='-adhlns=src/procedures.o.lst'
COLLECT_GCC=arm-none-eabi-gcc
Target: arm-none-eabi
Configured with: /Host/home/ilg/Work/arm-none-eabi-gcc-11.3.1-1.1/win32-x64/sources/gcc/configure --prefix=/Host/home/ilg/Work/arm-none-eabi-gcc-11.3.1-1.1/win32-x64/install/arm-none-eabi-gcc --prefix=/Host/home/ilg/Work/arm-none-eabi-gcc-11.3.1-1.1/win32-x64/install/arm-none-eabi-gcc --infodir=/Host/home/ilg/Work/arm-none-eabi-gcc-11.3.1-1.1/win32-x64/install/arm-none-eabi-gcc/share/doc/info --mandir=/Host/home/ilg/Work/arm-none-eabi-gcc-11.3.1-1.1/win32-x64/install/arm-none-eabi-gcc/share/doc/man --htmldir=/Host/home/ilg/Work/arm-none-eabi-gcc-11.3.1-1.1/win32-x64/install/arm-none-eabi-gcc/share/doc/html --pdfdir=/Host/home/ilg/Work/arm-none-eabi-gcc-11.3.1-1.1/win32-x64/install/arm-none-eabi-gcc/share/doc/pdf --build=x86_64-pc-linux-gnu --host=x86_64-w64-mingw32 --target=arm-none-eabi --disable-libgomp --disable-libmudflap --disable-libquadmath --disable-libsanitizer --disable-libssp --disable-nls --disable-shared --disable-threads --disable-tls --enable-checking=release --enable-languages=c,c  ,fortran --enable-mingw-wildcard --with-gmp=/Host/home/ilg/Work/arm-none-eabi-gcc-11.3.1-1.1/win32-x64/install/libs --with-newlib --with-pkgversion='xPack GNU Arm Embedded GCC x86_64' --with-gnu-as --with-gnu-ld --with-system-zlib --with-sysroot=/Host/home/ilg/Work/arm-none-eabi-gcc-11.3.1-1.1/win32-x64/install/arm-none-eabi-gcc/arm-none-eabi --with-native-system-header-dir=/include --disable-libatomic --enable-multilib --with-multilib-list=aprofile,rmprofile
Thread model: single
Supported LTO compression algorithms: zlib
gcc version 11.3.1 20220712 (xPack GNU Arm Embedded GCC x86_64) 
COLLECT_GCC_OPTIONS='-mcpu=cortex-m3' '-mthumb' '-O0' '-fmessage-length=0' '-fsigned-char' '-ffunction-sections' '-fdata-sections' '-g3' '-I' 'E:\_ARM_workspace2\minimal\src' '-I' 'E:\_ARM_workspace2\minimal\inc' '-save-temps' '-v' '-MMD' '-MP' '-MF' 'src/procedures.d' '-MT' 'src/procedures.o' '-c' '-o' 'src/procedures.o' '-mfloat-abi=soft' '-mlibarch=armv7-m' '-march=armv7-m' '-dumpdir' 'src/'
 c:/program files/eclipse/toolchains/arm-none-eabi/bin/../libexec/gcc/arm-none-eabi/11.3.1/cc1.exe -E -lang-asm -quiet -v -I E:\_ARM_workspace2\minimal\src -I E:\_ARM_workspace2\minimal\inc -imultilib thumb/v7-m/nofp -iprefix c:\program files\eclipse\toolchains\arm-none-eabi\bin\../lib/gcc/arm-none-eabi/11.3.1/ -isysroot c:\program files\eclipse\toolchains\arm-none-eabi\bin\../arm-none-eabi -MMD src/procedures.d -MF src/procedures.d -MP -MT src/procedures.o -dD -D__USES_INITFINI__ ../src/procedures.S -mcpu=cortex-m3 -mthumb -mfloat-abi=soft -mlibarch=armv7-m -march=armv7-m -fmessage-length=0 -fsigned-char -ffunction-sections -fdata-sections -g3 -fworking-directory -O0 -fpch-preprocess -fno-directives-only -o src/procedures.s
ignoring duplicate directory "c:/program files/eclipse/toolchains/arm-none-eabi/lib/gcc/../../lib/gcc/arm-none-eabi/11.3.1/include"
ignoring nonexistent directory "c:\program files\eclipse\toolchains\arm-none-eabi\bin\../arm-none-eabi/Host/home/ilg/Work/arm-none-eabi-gcc-11.3.1-1.1/win32-x64/install/arm-none-eabi-gcc/lib/gcc/arm-none-eabi/11.3.1/../../../../include"
ignoring duplicate directory "c:/program files/eclipse/toolchains/arm-none-eabi/lib/gcc/../../lib/gcc/arm-none-eabi/11.3.1/include-fixed"
ignoring duplicate directory "c:/program files/eclipse/toolchains/arm-none-eabi/lib/gcc/../../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/include"
ignoring duplicate directory "c:\program files\eclipse\toolchains\arm-none-eabi\bin\../arm-none-eabi/include"
#include "..." search starts here:
#include <...> search starts here:
 E:\_ARM_workspace2\minimal\src
 E:\_ARM_workspace2\minimal\inc
 c:\program files\eclipse\toolchains\arm-none-eabi\bin\../lib/gcc/arm-none-eabi/11.3.1/include
 c:\program files\eclipse\toolchains\arm-none-eabi\bin\../lib/gcc/arm-none-eabi/11.3.1/include-fixed
 c:\program files\eclipse\toolchains\arm-none-eabi\bin\../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/include
End of search list.
COLLECT_GCC_OPTIONS='-mcpu=cortex-m3' '-mthumb' '-O0' '-fmessage-length=0' '-fsigned-char' '-ffunction-sections' '-fdata-sections' '-g3' '-I' 'E:\_ARM_workspace2\minimal\src' '-I' 'E:\_ARM_workspace2\minimal\inc' '-save-temps' '-v' '-MMD' '-MP' '-MF' 'src/procedures.d' '-MT' 'src/procedures.o' '-c' '-o' 'src/procedures.o' '-mfloat-abi=soft' '-mlibarch=armv7-m' '-march=armv7-m' '-dumpdir' 'src/'
 c:/program files/eclipse/toolchains/arm-none-eabi/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/bin/as.exe --gdwarf-5 -v -I E:\_ARM_workspace2\minimal\src -I E:\_ARM_workspace2\minimal\inc -march=armv7-m -mfloat-abi=soft -meabi=5 -adhlns=src/procedures.o.lst -o src/procedures.o src/procedures.s
GNU assembler version 2.38 (arm-none-eabi) using BFD version (xPack GNU Arm Embedded GCC x86_64) 2.38.20220708
../src/procedures.S: Assembler messages:
../src/procedures.S:17: Error: syntax error -- `ldr r2,=~(RCC_CFGR_HPRE_mask|RCC_CFGR_PPRE1_mask|RCC_CFGR_PPRE2_mask|RCC_CFGR_ADCPRE_mask|RCC_CFGR_MCO_mask)'
../src/procedures.S:20: Error: syntax error -- `ldr r2,=~RCC_CR_CSSON_mask'
make: *** [src/subdir.mk:26: src/procedures.o] Error 1
"make all" terminated with exit code 2. Build might be incomplete.

11:43:02 Build Failed. 3 errors, 0 warnings. (took 354ms)

uj5u.com熱心網友回復:

這是一個最小的例子。

.equ BIT_30, (1 << 30)
.equ BIT_27, (1 << 27)
.equ BIT_25, (1 << 25)
.equ BIT_5,  (1 << 5 )
ldr r0, = ~(BIT_30 | BIT_27 | BIT_25 | BIT_5)

問題中提供的資訊暗示了這一點。你沒有指出架構,所以......

arm-none-eabi-as --version
GNU assembler (GNU Binutils) 2.39
Copyright (C) 2022 Free Software Foundation, Inc.
This program is free software; you may redistribute it under the terms of
the GNU General Public License version 3 or later.
This program has absolutely no warranty.
This assembler was configured for a target of `arm-none-eabi'.

arm-none-eabi-as so.s -o so.o
arm-none-eabi-objdump -d so.o

so.o:     file format elf32-littlearm


Disassembly of section .text:

00000000 <.text>:
   0:   e51f0004    ldr r0, [pc, #-4]   ; 4 <BIT_5-0x1c>
   4:   b5ffffdf    .word   0xb5ffffdf

沒有錯誤也沒有警告。

arm-none-eabi-gcc -c so.s -o so.o
arm-none-eabi-objdump -d so.o

so.o:     file format elf32-littlearm


Disassembly of section .text:

00000000 <.text>:
   0:   e51f0004    ldr r0, [pc, #-4]   ; 4 <BIT_5-0x1c>
   4:   b5ffffdf    .word   0xb5ffffdf

cp so.s so.S

arm-none-eabi-gcc -c so.S -o so.o
arm-none-eabi-objdump -d so.o

so.o:     file format elf32-littlearm


Disassembly of section .text:

00000000 <.text>:
   0:   e51f0004    ldr r0, [pc, #-4]   ; 4 <BIT_5-0x1c>
   4:   b5ffffdf    .word   0xb5ffffdf

現在

arm-none-eabi-gcc -mcpu=cortex-m3 -mthumb -c so.S -o so.o
arm-none-eabi-objdump -d so.o

so.o:     file format elf32-littlearm


Disassembly of section .text:

00000000 <.text>:
   0:   4800        ldr r0, [pc, #0]    ; (4 <BIT_5-0x1c>)
   2:   0000        .short  0x0000
   4:   b5ffffdf    .word   0xb5ffffdf

更接近您的代碼

so.inc

.equ BIT_30, (1 << 30)
.equ BIT_27, (1 << 27)
.equ BIT_25, (1 << 25)
.equ BIT_5,  (1 << 5 )

所以.s

.include "so.inc"

ldr r0, = ~(BIT_30 | BIT_27 | BIT_25 | BIT_5)

仍然有效

arm-none-eabi-as -mcpu=cortex-m3 so.s -o so.o
arm-none-eabi-objdump -d so.o

so.o:     file format elf32-littlearm


Disassembly of section .text:

00000000 <.text>:
   0:   4800        ldr r0, [pc, #0]    ; (4 <BIT_5-0x1c>)
   2:   0000        .short  0x0000
   4:   b5ffffdf    .word   0xb5ffffdf

GNU 匯編器版本 2.38 (arm-none-eabi) 使用 BFD 版本 (xPack GNU Arm Embedded GCC x86_64) 2.38.20220708 ../src/procedures.S:匯編器訊息:../src/procedures.S:17:錯誤:語法錯誤 -- ldr r2,=~RCC_CFGR_HPRE_mask|RCC_CFGR_PPRE1_mask|RCC_CFGR_PPRE2_mask|RCC_CFGR_ADCPRE_mask|RCC_CFGR_MCO_mask)' ../src/procedures.S:20: Error: syntax error -- ldr r2,=~RCC_CR_CSSON_mask'

因此,如果我們查看procedures.S,我們可以輕松地提供問題的最小示例:

所以.s

ldr r0, = ~(BIT_30 | BIT_27 | BIT_25 | BIT_5)

arm-none-eabi-as -mcpu=cortex-m3 so.s -o so.o
so.s: Assembler messages:
so.s:2: Error: syntax error -- `ldr r0,=~(BIT_30|BIT_27|BIT_25|BIT_5)'

我們去吧。轉載。

不過,你包括這條紅鯡魚

But GNU toolchain refuses to evaluate the constant expression producing Syntax error. (I can use only ldr r0, =BIT_30 for example).

所以.s

ldr r0, =BIT_30

arm-none-eabi-as -mcpu=cortex-m3 so.s -o so.o
arm-none-eabi-objdump -d so.o

so.o:     file format elf32-littlearm


Disassembly of section .text:

00000000 <.text>:
   0:   4800        ldr r0, [pc, #0]    ; (4 <.text 0x4>)
   2:   0000        .short  0x0000
   4:   00000000    .word   0x00000000

arm-none-eabi-ld so.o -o so.elf
arm-none-eabi-ld: warning: cannot find entry symbol _start; defaulting to 0000000000008000
arm-none-eabi-ld: so.o:(.text 0x4): undefined reference to `BIT_30'

正如預期的那樣。

提供定義

.equ BIT_30, (1 << 30)
ldr r0, =BIT_30

arm-none-eabi-as -mcpu=cortex-m3 so.s -o so.o
arm-none-eabi-ld so.o -o so.elf
arm-none-eabi-ld: warning: cannot find entry symbol _start; defaulting to 0000000000008000
arm-none-eabi-objdump -d so.elf

so.elf:     file format elf32-littlearm


Disassembly of section .text:

00008000 <__bss_end__-0x10004>:
    8000:   f04f 4080   mov.w   r0, #1073741824 ; 0x40000000

正如預期的那樣。

你有沒有試過這個

所以.s

ldr r0, =~BIT_30

你會看到問題

arm-none-eabi-as -mcpu=cortex-m3 so.s -o so.o
so.s: Assembler messages:
so.s:2: Error: syntax error -- `ldr r0,=~BIT_30'

就像您在上面的 procedure.S 和實際最小示例中看到的那樣。

轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/514013.html

標籤:部件海合会手臂gnu 汇编器

上一篇:了解匯編中的函式何時為void或int

下一篇:在Windows10x64上進行NASM編譯后,無法使用GCC創建x64.exe檔案

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • Git本地庫既關聯GitHub又關聯Gitee

    創建代碼倉庫 使用gitee舉例(github和gitee差不多) 1.在gitee右上角點擊+,選擇新建倉庫 ? 2.選擇填寫倉庫資訊,然后進行創建 ? 3.服務端已經準備好了,本地開始作準備 (1)Git 全域設定 git config --global user.name "成鈺" git c ......

    uj5u.com 2020-09-10 05:04:14 more
  • CODING DevOps 代碼質量實戰系列第二課,相約周三

    隨著 ToB(企業服務)的興起和 ToC(消費互聯網)產品進入成熟期,線上故障帶來的損失越來越大,代碼質量越來越重要,而「質量內建」正是 DevOps 核心理念之一。**《DevOps 代碼質量實戰(PHP 版)》**為 CODING DevOps 代碼質量實戰系列的第二課,同時也是本系列的 PHP ......

    uj5u.com 2020-09-10 05:07:43 more
  • 推薦Scrum書籍

    推薦Scrum書籍 直接上干貨,推薦書籍清單如下(推薦有順序的哦) Scrum指南 Scrum精髓 Scrum敏捷軟體開發 Scrum捷徑 硝煙中的Scrum和XP : 我們如何實施Scrum 敏捷軟體開發:Scrum實戰指南 Scrum要素 大規模Scrum:大規模敏捷組織的設計 用戶故事地圖 用 ......

    uj5u.com 2020-09-10 05:07:45 more
  • CODING DevOps 代碼質量實戰系列最后一課,周四發車

    隨著 ToB(企業服務)的興起和 ToC(消費互聯網)產品進入成熟期,線上故障帶來的損失越來越大,代碼質量越來越重要,而「質量內建」正是 DevOps 核心理念之一。 **《DevOps 代碼質量實戰(Java 版)》**為 CODING DevOps 代碼質量實戰系列的最后一課,同時也是本系列的 ......

    uj5u.com 2020-09-10 05:07:52 more
  • 敏捷軟體工程實踐書籍

    Scrum轉型想要做好,第一步先了解并真正落實Scrum,那么我推薦的Scrum書籍是要看懂并實踐的。第二步是團隊的工程實踐要做扎實。 下面推薦工程實踐書單: 重構:改善既有代碼的設計 決議極限編程 : 擁抱變化 代碼整潔代碼 程式員的職業素養 修改代碼的藝術 撰寫可讀代碼的藝術 測驗驅動開發 : ......

    uj5u.com 2020-09-10 05:07:55 more
  • Jenkins+svn+nginx實作windows環境自動部署vue前端專案

    前面文章介紹了Jenkins+svn+tomcat實作自動化部署,現在終于有空抽時間出來寫下Jenkins+svn+nginx實作自動部署vue前端專案。 jenkins的安裝和配置已經在前面文章進行介紹,下面介紹實作vue前端專案需要進行的哪些額外的步驟。 注意:在安裝jenkins和nginx的 ......

    uj5u.com 2020-09-10 05:08:49 more
  • CODING DevOps 微服務專案實戰系列第一課,明天等你

    CODING DevOps 微服務專案實戰系列第一課**《DevOps 微服務專案實戰:DevOps 初體驗》**將由 CODING DevOps 開發工程師 王寬老師 向大家介紹 DevOps 的基本理念,并探討為什么現代開發活動需要 DevOps,同時將以 eShopOnContainers 項 ......

    uj5u.com 2020-09-10 05:09:14 more
  • CODING DevOps 微服務專案實戰系列第二課來啦!

    近年來,工程專案的結構越來越復雜,需要接入合適的持續集成流水線形式,才能滿足更多變的需求,那么如何優雅地使用 CI 能力提升生產效率呢?CODING DevOps 微服務專案實戰系列第二課 《DevOps 微服務專案實戰:CI 進階用法》 將由 CODING DevOps 全堆疊工程師 何晨哲老師 向 ......

    uj5u.com 2020-09-10 05:09:33 more
  • CODING DevOps 微服務專案實戰系列最后一課,周四開講!

    隨著軟體工程越來越復雜化,如何在 Kubernetes 集群進行灰度發布成為了生產部署的”必修課“,而如何實作安全可控、自動化的灰度發布也成為了持續部署重點關注的問題。CODING DevOps 微服務專案實戰系列最后一課:**《DevOps 微服務專案實戰:基于 Nginx-ingress 的自動 ......

    uj5u.com 2020-09-10 05:10:00 more
  • CODING 儀表盤功能正式推出,實作作業資料可視化!

    CODING 儀表盤功能現已正式推出!該功能旨在用一張張統計卡片的形式,統計并展示使用 CODING 中所產生的資料。這意味著無需額外的設定,就可以收集歸納寶貴的作業資料并予之量化分析。這些海量的資料皆會以圖表或串列的方式躍然紙上,方便團隊成員隨時查看各專案的進度、狀態和指標,云端協作迎來真正意義上 ......

    uj5u.com 2020-09-10 05:11:01 more
最新发布
  • windows系統git使用ssh方式和gitee/github進行同步

    使用git來clone專案有兩種方式:HTTPS和SSH:
    HTTPS:不管是誰,拿到url隨便clone,但是在push的時候需要驗證用戶名和密碼;
    SSH:clone的專案你必須是擁有者或者管理員,而且需要在clone前添加SSH Key。SSH 在push的時候,是不需要輸入用戶名的,如果配置... ......

    uj5u.com 2023-04-19 08:41:12 more
  • windows系統git使用ssh方式和gitee/github進行同步

    使用git來clone專案有兩種方式:HTTPS和SSH:
    HTTPS:不管是誰,拿到url隨便clone,但是在push的時候需要驗證用戶名和密碼;
    SSH:clone的專案你必須是擁有者或者管理員,而且需要在clone前添加SSH Key。SSH 在push的時候,是不需要輸入用戶名的,如果配置... ......

    uj5u.com 2023-04-19 08:35:34 more
  • 2023年農牧行業6大CRM系統、5大場景盤點

    在物聯網、大資料、云計算、人工智能、自動化技術等現代資訊技術蓬勃發展與逐步成熟的背景下,數字化正成為農牧行業供給側結構性變革與高質量發展的核心驅動因素。因此,改造和提升傳統農牧業、開拓創新現代智慧農牧業,加快推進農牧業的現代化、資訊化、數字化建設已成為農牧業發展的重要方向。 當下,企業數字化轉型已經 ......

    uj5u.com 2023-04-18 08:05:44 more
  • 2023年農牧行業6大CRM系統、5大場景盤點

    在物聯網、大資料、云計算、人工智能、自動化技術等現代資訊技術蓬勃發展與逐步成熟的背景下,數字化正成為農牧行業供給側結構性變革與高質量發展的核心驅動因素。因此,改造和提升傳統農牧業、開拓創新現代智慧農牧業,加快推進農牧業的現代化、資訊化、數字化建設已成為農牧業發展的重要方向。 當下,企業數字化轉型已經 ......

    uj5u.com 2023-04-18 08:00:18 more
  • 計算機組成原理—存盤器

    計算機組成原理—硬體結構 二、存盤器 1.概述 存盤器是計算機系統中的記憶設備,用來存放程式和資料 1.1存盤器的層次結構 快取-主存層次主要解決CPU和主存速度不匹配的問題,速度接近快取 主存-輔存層次主要解決存盤系統的容量問題,容量接近與價位接近于主存 2.主存盤器 2.1概述 主存與CPU的聯 ......

    uj5u.com 2023-04-17 08:20:31 more
  • 談一談我對協同開發的一些認識

    如今各互聯網公司普通都使用敏捷開發,采用小步快跑的形式來進行專案開發。如果是小專案或者小需求,那一個開發可能就搞定了。但對于電商等復雜的系統,其功能多,結構復雜,一個人肯定是搞不定的,所以都是很多人來共同開發維護。以我曾經待過的商城團隊為例,光是后端開發就有七十多人。 為了更好地開發這類大型系統,往 ......

    uj5u.com 2023-04-17 08:18:55 more
  • 專案管理PRINCE2核心知識點整理

    PRINCE2,即 PRoject IN Controlled Environment(受控環境中的專案)是一種結構化的專案管理方法論,由英國政府內閣商務部(OGC)推出,是英國專案管理標準。
    PRINCE2 作為一種開放的方法論,是一套結構化的專案管理流程,描述了如何以一種邏輯性的、有組織的方法,... ......

    uj5u.com 2023-04-17 08:18:51 more
  • 談一談我對協同開發的一些認識

    如今各互聯網公司普通都使用敏捷開發,采用小步快跑的形式來進行專案開發。如果是小專案或者小需求,那一個開發可能就搞定了。但對于電商等復雜的系統,其功能多,結構復雜,一個人肯定是搞不定的,所以都是很多人來共同開發維護。以我曾經待過的商城團隊為例,光是后端開發就有七十多人。 為了更好地開發這類大型系統,往 ......

    uj5u.com 2023-04-17 08:18:00 more
  • 專案管理PRINCE2核心知識點整理

    PRINCE2,即 PRoject IN Controlled Environment(受控環境中的專案)是一種結構化的專案管理方法論,由英國政府內閣商務部(OGC)推出,是英國專案管理標準。
    PRINCE2 作為一種開放的方法論,是一套結構化的專案管理流程,描述了如何以一種邏輯性的、有組織的方法,... ......

    uj5u.com 2023-04-17 08:17:55 more
  • 計算機組成原理—存盤器

    計算機組成原理—硬體結構 二、存盤器 1.概述 存盤器是計算機系統中的記憶設備,用來存放程式和資料 1.1存盤器的層次結構 快取-主存層次主要解決CPU和主存速度不匹配的問題,速度接近快取 主存-輔存層次主要解決存盤系統的容量問題,容量接近與價位接近于主存 2.主存盤器 2.1概述 主存與CPU的聯 ......

    uj5u.com 2023-04-17 08:12:06 more