Hi,
Since the PRUSS 0 does not have an explicit PRU Shared memory available on AM437x I am trying to use PRU DMEM to share variables across the two PRU cores. I have added a pragma directive for DATA_SECTION in both the C files (PRU0 and PRU1 code) and also specified it in the linker file. Both '.map' files show the same address location and space for the variable but I don't see the variable being updated. The way i am checking this is that as soon as the PRU1 updates the variable, PRU0 flashes an led but that doesn't look like it is working.
Here are the relevant sections:
C file declaration in PRU0.c and PRU1.c (identical in both):
#pragma DATA_SECTION(max_count, ".max_count") volatile far uint32_t max_count = 0;
The .map file:
PRU0
.max_count
* 1 00002fe0 00000004 UNINITIALIZED
00002fe0 00000004 PRU0.object (.max_count)
PRU1
.max_count
* 1 00002fe0 00000004 UNINITIALIZED
00002fe0 00000004 PRU_pidSendData.object (.max_count)
And I have also attached the linker file.
/****************************************************************************/ /* AM437x_PRU_SS0.cmd */ /* Copyright (c) 2015 Texas Instruments Incorporated */ /* */ /* Description: This file is a linker command file that can be used for */ /* linking PRU programs built with the C compiler and */ /* the resulting .out file on an AM437x device. */ /****************************************************************************/ -cr /* Link using C conventions */ /* Specify the System Memory Map */ MEMORY { PAGE 0: PRU_IMEM : org = 0x00000000 len = 0x00001000 /* 4kB PRU-ICSS0 Instruction RAM */ PAGE 1: /* RAM */ PRU_DMEM_0_1 : org = 0x00000000 len = 0x00001000 CREGISTER=24 /* 4kB PRU Data RAM 0_1 */ PRU_DMEM_1_0 : org = 0x00002000 len = 0x00000fe0 CREGISTER=25 /* 4kB PRU Data RAM 1_0 */ SHAREDMEM : org = 0x00002fe0 len = 0x00000004 DDR : org = 0x80000000 len = 0x00000100 CREGISTER=31 L3OCMC : org = 0x40000000 len = 0x00010000 CREGISTER=30 PAGE 2: /* Peripherals */ PRU_CFG : org = 0x00026000 len = 0x00000120 CREGISTER=4 PRU_ECAP : org = 0x00030000 len = 0x00000060 CREGISTER=3 PRU_IEP : org = 0x0002E000 len = 0x0000031C CREGISTER=26 PRU_INTC : org = 0x00020000 len = 0x00001504 CREGISTER=0 PRU_UART : org = 0x00028000 len = 0x00000038 CREGISTER=7 DCAN0 : org = 0x481CC000 len = 0x000001E8 CREGISTER=14 DCAN1 : org = 0x481D0000 len = 0x000001E8 CREGISTER=15 DMTIMER2 : org = 0x48040000 len = 0x0000005C CREGISTER=1 PWMSS0 : org = 0x48300000 len = 0x000002C4 CREGISTER=18 PWMSS1 : org = 0x48302000 len = 0x000002C4 CREGISTER=19 PWMSS2 : org = 0x48304000 len = 0x000002C4 CREGISTER=20 GEMAC : org = 0x4A100000 len = 0x0000128C CREGISTER=9 I2C1 : org = 0x4802A000 len = 0x000000D8 CREGISTER=2 I2C2 : org = 0x4819C000 len = 0x000000D8 CREGISTER=17 MBX0 : org = 0x480C8000 len = 0x00000140 CREGISTER=22 MCASP0_DMA : org = 0x46000000 len = 0x00000100 CREGISTER=8 MCSPI0 : org = 0x48030000 len = 0x000001A4 CREGISTER=6 MCSPI1 : org = 0x481A0000 len = 0x000001A4 CREGISTER=16 MMCSD0 : org = 0x48060000 len = 0x00000300 CREGISTER=5 SPINLOCK : org = 0x480CA000 len = 0x00000880 CREGISTER=23 TPCC : org = 0x49000000 len = 0x00001098 CREGISTER=29 UART1 : org = 0x48022000 len = 0x00000088 CREGISTER=11 UART2 : org = 0x48024000 len = 0x00000088 CREGISTER=12 RSVD10 : org = 0x48318000 len = 0x00000100 CREGISTER=10 RSVD13 : org = 0x48310000 len = 0x00000100 CREGISTER=13 RSVD21 : org = 0x00032400 len = 0x00000100 CREGISTER=21 RSVD27 : org = 0x00032000 len = 0x00000100 CREGISTER=27 } /* Specify the sections allocation into memory */ SECTIONS { /* Forces _c_int00 to the start of PRU IRAM. Not necessary when loading an ELF file, but useful when loading a binary */ .text:_c_int00* > 0x0, PAGE 0 .text > PRU_IMEM, PAGE 0 .stack > PRU_DMEM_0_1, PAGE 1 .bss > PRU_DMEM_0_1, PAGE 1 .cio > PRU_DMEM_0_1, PAGE 1 .data > PRU_DMEM_0_1, PAGE 1 .switch > PRU_DMEM_0_1, PAGE 1 .sysmem > PRU_DMEM_0_1, PAGE 1 .cinit > PRU_DMEM_0_1, PAGE 1 .rodata > PRU_DMEM_0_1, PAGE 1 .rofardata > PRU_DMEM_0_1, PAGE 1 .farbss > PRU_DMEM_0_1, PAGE 1 .fardata > PRU_DMEM_0_1, PAGE 1 .resource_table > PRU_DMEM_0_1, PAGE 1 .max_count > SHAREDMEM, PAGE 1 }
Is there something else that needs to be declared?