Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
O
OpenXG-RAN
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wangjie
OpenXG-RAN
Commits
50561347
Commit
50561347
authored
Aug 04, 2016
by
Raymond Knopp
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
debugging of IF4p5 RRU
parent
1ef7ec80
Changes
10
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
463 additions
and
326 deletions
+463
-326
openair1/PHY/LTE_TRANSPORT/if4_tools.c
openair1/PHY/LTE_TRANSPORT/if4_tools.c
+1
-1
openair1/PHY/LTE_TRANSPORT/prach.c
openair1/PHY/LTE_TRANSPORT/prach.c
+23
-5
openair1/PHY/defs.h
openair1/PHY/defs.h
+6
-3
openair1/PHY/vars.h
openair1/PHY/vars.h
+1
-1
openair1/SCHED/phy_procedures_lte_eNb.c
openair1/SCHED/phy_procedures_lte_eNb.c
+12
-9
targets/ARCH/ETHERNET/USERSPACE/LIB/eth_raw.c
targets/ARCH/ETHERNET/USERSPACE/LIB/eth_raw.c
+2
-1
targets/ARCH/ETHERNET/USERSPACE/LIB/ethernet_lib.c
targets/ARCH/ETHERNET/USERSPACE/LIB/ethernet_lib.c
+1
-1
targets/RT/USER/lte-enb.c
targets/RT/USER/lte-enb.c
+229
-145
targets/RT/USER/lte-softmodem.c
targets/RT/USER/lte-softmodem.c
+187
-160
targets/SIMU/USER/init_lte.c
targets/SIMU/USER/init_lte.c
+1
-0
No files found.
openair1/PHY/LTE_TRANSPORT/if4_tools.c
View file @
50561347
...
@@ -133,7 +133,7 @@ void send_IF4p5(PHY_VARS_eNB *eNB, int frame, int subframe, uint16_t packet_type
...
@@ -133,7 +133,7 @@ void send_IF4p5(PHY_VARS_eNB *eNB, int frame, int subframe, uint16_t packet_type
}
}
}
else
if
(
packet_type
==
IF4p5_PRACH
)
{
}
else
if
(
packet_type
==
IF4p5_PRACH
)
{
// FIX: hard coded prach samples length
// FIX: hard coded prach samples length
db_fulllength
=
8
39
*
2
;
db_fulllength
=
8
40
*
2
;
IF4p5_header_t
*
prach_header
=
(
IF4p5_header_t
*
)(
tx_buffer
+
MAC_HEADER_SIZE_BYTES
);
IF4p5_header_t
*
prach_header
=
(
IF4p5_header_t
*
)(
tx_buffer
+
MAC_HEADER_SIZE_BYTES
);
data_block
=
(
uint16_t
*
)(
tx_buffer
+
MAC_HEADER_SIZE_BYTES
+
sizeof_IF4p5_header_t
);
data_block
=
(
uint16_t
*
)(
tx_buffer
+
MAC_HEADER_SIZE_BYTES
+
sizeof_IF4p5_header_t
);
...
...
openair1/PHY/LTE_TRANSPORT/prach.c
View file @
50561347
...
@@ -1065,7 +1065,7 @@ void rx_prach(PHY_VARS_eNB *eNB,
...
@@ -1065,7 +1065,7 @@ void rx_prach(PHY_VARS_eNB *eNB,
int
i
;
int
i
;
lte_frame_type_t
frame_type
=
eNB
->
frame_parms
.
frame_type
;
lte_frame_type_t
frame_type
=
eNB
->
frame_parms
.
frame_type
;
int
subframe
=
eNB
->
proc
.
subframe_
rx
;
int
subframe
=
eNB
->
proc
.
subframe_
prach
;
uint16_t
rootSequenceIndex
=
eNB
->
frame_parms
.
prach_config_common
.
rootSequenceIndex
;
uint16_t
rootSequenceIndex
=
eNB
->
frame_parms
.
prach_config_common
.
rootSequenceIndex
;
uint8_t
prach_ConfigIndex
=
eNB
->
frame_parms
.
prach_config_common
.
prach_ConfigInfo
.
prach_ConfigIndex
;
uint8_t
prach_ConfigIndex
=
eNB
->
frame_parms
.
prach_config_common
.
prach_ConfigInfo
.
prach_ConfigIndex
;
uint8_t
Ncs_config
=
eNB
->
frame_parms
.
prach_config_common
.
prach_ConfigInfo
.
zeroCorrelationZoneConfig
;
uint8_t
Ncs_config
=
eNB
->
frame_parms
.
prach_config_common
.
prach_ConfigInfo
.
zeroCorrelationZoneConfig
;
...
@@ -1101,6 +1101,8 @@ void rx_prach(PHY_VARS_eNB *eNB,
...
@@ -1101,6 +1101,8 @@ void rx_prach(PHY_VARS_eNB *eNB,
int
fft_size
,
log2_ifft_size
;
int
fft_size
,
log2_ifft_size
;
uint8_t
nb_ant_rx
=
1
;
//eNB->frame_parms.nb_antennas_rx;
uint8_t
nb_ant_rx
=
1
;
//eNB->frame_parms.nb_antennas_rx;
// int en;
for
(
aa
=
0
;
aa
<
nb_ant_rx
;
aa
++
)
{
for
(
aa
=
0
;
aa
<
nb_ant_rx
;
aa
++
)
{
prach
[
aa
]
=
(
int16_t
*
)
&
eNB
->
common_vars
.
rxdata
[
0
][
aa
][
subframe
*
eNB
->
frame_parms
.
samples_per_tti
-
eNB
->
N_TA_offset
];
prach
[
aa
]
=
(
int16_t
*
)
&
eNB
->
common_vars
.
rxdata
[
0
][
aa
][
subframe
*
eNB
->
frame_parms
.
samples_per_tti
-
eNB
->
N_TA_offset
];
}
}
...
@@ -1282,8 +1284,11 @@ void rx_prach(PHY_VARS_eNB *eNB,
...
@@ -1282,8 +1284,11 @@ void rx_prach(PHY_VARS_eNB *eNB,
k
*=
2
;
k
*=
2
;
/// **** send_IF4 of rxsigF to RCC **** ///
/// **** send_IF4 of rxsigF to RCC **** ///
send_IF4p5
(
eNB
,
eNB
->
proc
.
frame_
rx
,
eNB
->
proc
.
subframe_rx
,
IF4p5_PRACH
,
k
);
send_IF4p5
(
eNB
,
eNB
->
proc
.
frame_
prach
,
eNB
->
proc
.
subframe_prach
,
IF4p5_PRACH
,
k
);
// en = dB_fixed(signal_energy(&rxsigF[0][k],840));
// if (en>60)
// printf("PRACH: Frame %d, Subframe %d => %d dB\n",eNB->proc.frame_rx,eNB->proc.subframe_rx,en);
return
;
return
;
}
else
if
(
eNB
->
node_function
==
NGFI_RCC_IF4p5
)
{
}
else
if
(
eNB
->
node_function
==
NGFI_RCC_IF4p5
)
{
k
=
(
12
*
n_ra_prb
)
-
6
*
eNB
->
frame_parms
.
N_RB_UL
;
k
=
(
12
*
n_ra_prb
)
-
6
*
eNB
->
frame_parms
.
N_RB_UL
;
...
@@ -1469,11 +1474,24 @@ void rx_prach(PHY_VARS_eNB *eNB,
...
@@ -1469,11 +1474,24 @@ void rx_prach(PHY_VARS_eNB *eNB,
#endif
#endif
// if (aa=1) write_output("prach_rxF_comp1.m","prach_rxF_comp1",prachF,1024,1,1);
// if (aa=1) write_output("prach_rxF_comp1.m","prach_rxF_comp1",prachF,1024,1,1);
}
// antennas_rx
}
// antennas_rx
#ifdef PRACH_DEBUG
#ifdef PRACH_DEBUG
write_output
(
"prach_ifft0.m"
,
"prach_t0"
,
prach_ifft
[
0
],
2048
,
1
,
1
);
if
(
en
>
40
)
{
k
=
(
12
*
n_ra_prb
)
-
6
*
eNB
->
frame_parms
.
N_RB_UL
;
if
(
k
<
0
)
k
+=
(
eNB
->
frame_parms
.
ofdm_symbol_size
);
k
*=
12
;
k
+=
13
;
k
*=
2
;
printf
(
"Dumping prach, k = %d (n_ra_prb %d)
\n
"
,
k
,
n_ra_prb
);
write_output
(
"rxsigF.m"
,
"prach_rxF"
,
&
rxsigF
[
0
][
k
],
840
,
1
,
1
);
write_output
(
"prach_rxF_comp0.m"
,
"prach_rxF_comp0"
,
prachF
,
1024
,
1
,
1
);
write_output
(
"prach_ifft0.m"
,
"prach_t0"
,
prach_ifft
[
0
],
1024
,
1
,
1
);
exit
(
-
1
);
}
#endif
#endif
// write_output("prach_ifft1.m","prach_t1",prach_ifft[1],2048,1,1);
}
// new dft
}
// new dft
// check energy in nth time shift
// check energy in nth time shift
...
...
openair1/PHY/defs.h
View file @
50561347
...
@@ -260,6 +260,8 @@ typedef struct eNB_proc_t_s {
...
@@ -260,6 +260,8 @@ typedef struct eNB_proc_t_s {
pthread_t
pthread_asynch_rxtx
;
pthread_t
pthread_asynch_rxtx
;
/// flag to indicate first RX acquisition
/// flag to indicate first RX acquisition
int
first_rx
;
int
first_rx
;
/// flag to indicate first TX transmission
int
first_tx
;
/// pthread attributes for FH processing thread
/// pthread attributes for FH processing thread
pthread_attr_t
attr_FH
;
pthread_attr_t
attr_FH
;
/// pthread attributes for prach processing thread
/// pthread attributes for prach processing thread
...
@@ -362,14 +364,15 @@ typedef struct PHY_VARS_eNB_s {
...
@@ -362,14 +364,15 @@ typedef struct PHY_VARS_eNB_s {
eNB_func_t
node_function
;
eNB_func_t
node_function
;
eNB_timing_t
node_timing
;
eNB_timing_t
node_timing
;
int
abstraction_flag
;
int
abstraction_flag
;
void
(
*
do_prach
)(
struct
PHY_VARS_eNB_s
*
eNB
,
eNB_proc_t
*
proc
);
void
(
*
do_prach
)(
struct
PHY_VARS_eNB_s
*
eNB
);
void
(
*
fep
)(
struct
PHY_VARS_eNB_s
*
eNB
,
eNB_proc_t
*
proc
);
void
(
*
fep
)(
struct
PHY_VARS_eNB_s
*
eNB
);
void
(
*
proc_uespec_rx
)(
struct
PHY_VARS_eNB_s
*
eNB
,
eNB_rxtx_proc_t
*
proc
,
const
relaying_type_t
r_type
);
void
(
*
proc_uespec_rx
)(
struct
PHY_VARS_eNB_s
*
eNB
,
eNB_rxtx_proc_t
*
proc
,
const
relaying_type_t
r_type
);
void
(
*
proc_tx
)(
struct
PHY_VARS_eNB_s
*
eNB
,
eNB_rxtx_proc_t
*
proc
,
relaying_type_t
r_type
,
PHY_VARS_RN
*
rn
);
void
(
*
proc_tx
)(
struct
PHY_VARS_eNB_s
*
eNB
,
eNB_rxtx_proc_t
*
proc
,
relaying_type_t
r_type
,
PHY_VARS_RN
*
rn
);
void
(
*
tx_fh
)(
struct
PHY_VARS_eNB_s
*
eNB
,
eNB_rxtx_proc_t
*
proc
);
void
(
*
tx_fh
)(
struct
PHY_VARS_eNB_s
*
eNB
,
eNB_rxtx_proc_t
*
proc
);
void
(
*
rx_fh
)(
struct
PHY_VARS_eNB_s
*
eNB
,
eNB_proc_t
*
proc
,
int
*
frame
,
int
*
subframe
);
void
(
*
rx_fh
)(
struct
PHY_VARS_eNB_s
*
eNB
,
int
*
frame
,
int
*
subframe
);
int
(
*
start_rf
)(
struct
PHY_VARS_eNB_s
*
eNB
);
int
(
*
start_rf
)(
struct
PHY_VARS_eNB_s
*
eNB
);
int
(
*
start_if
)(
struct
PHY_VARS_eNB_s
*
eNB
);
int
(
*
start_if
)(
struct
PHY_VARS_eNB_s
*
eNB
);
void
(
*
fh_asynch
)(
struct
PHY_VARS_eNB_s
*
eNB
,
int
*
frame
,
int
*
subframe
);
uint8_t
local_flag
;
uint8_t
local_flag
;
uint32_t
rx_total_gain_dB
;
uint32_t
rx_total_gain_dB
;
LTE_DL_FRAME_PARMS
frame_parms
;
LTE_DL_FRAME_PARMS
frame_parms
;
...
...
openair1/PHY/vars.h
View file @
50561347
...
@@ -139,7 +139,7 @@ double beta2_dlsch[6][MCS_COUNT] = { {2.52163, 0.83231, 0.77472, 1.36536, 1.1682
...
@@ -139,7 +139,7 @@ double beta2_dlsch[6][MCS_COUNT] = { {2.52163, 0.83231, 0.77472, 1.36536, 1.1682
*/
*/
char
eNB_functions
[
5
][
20
]
=
{
"eNodeB_3GPP"
,
"eNodeB_3GPP_BBU"
,
"NGFI_RRU_IF5"
,
"NGFI_RRU_IF4"
,
"NGFI_RCC_IF4"
};
char
eNB_functions
[
6
][
20
]
=
{
"eNodeB_3GPP"
,
"eNodeB_3GPP_BBU"
,
"NGFI_RCC_IF4p5"
,
"NGFI_RAI_IF4p5"
,
"NGFI_RRU_IF5"
,
"NGFI_RRU_IF4p5"
,
};
char
eNB_timing
[
2
][
20
]
=
{
"synch_to_ext_device"
,
"synch_to_other"
};
char
eNB_timing
[
2
][
20
]
=
{
"synch_to_ext_device"
,
"synch_to_other"
};
...
...
openair1/SCHED/phy_procedures_lte_eNb.c
View file @
50561347
...
@@ -1950,12 +1950,14 @@ void prach_procedures(PHY_VARS_eNB *eNB) {
...
@@ -1950,12 +1950,14 @@ void prach_procedures(PHY_VARS_eNB *eNB) {
break
;
break
;
}
}
/*
mac_xface->initiate_ra_proc(eNB->Mod_id,
mac_xface->initiate_ra_proc(eNB->Mod_id,
eNB->CC_id,
eNB->CC_id,
frame,
frame,
preamble_max,
preamble_max,
preamble_delay_list[preamble_max]*update_TA,
preamble_delay_list[preamble_max]*update_TA,
0,subframe,0);
0,subframe,0);
*/
}
}
}
else
{
}
else
{
...
@@ -2490,8 +2492,9 @@ void cba_procedures(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc,int UE_id,int harq_p
...
@@ -2490,8 +2492,9 @@ void cba_procedures(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc,int UE_id,int harq_p
}
}
void
eNB_fep_full
(
PHY_VARS_eNB
*
eNB
,
eNB_proc_t
*
proc
)
{
void
eNB_fep_full
(
PHY_VARS_eNB
*
eNB
)
{
eNB_proc_t
*
proc
=
&
eNB
->
proc
;
int
l
;
int
l
;
LTE_DL_FRAME_PARMS
*
fp
=&
eNB
->
frame_parms
;
LTE_DL_FRAME_PARMS
*
fp
=&
eNB
->
frame_parms
;
...
@@ -2503,7 +2506,7 @@ void eNB_fep_full(PHY_VARS_eNB *eNB,eNB_proc_t *proc) {
...
@@ -2503,7 +2506,7 @@ void eNB_fep_full(PHY_VARS_eNB *eNB,eNB_proc_t *proc) {
&
eNB
->
common_vars
,
&
eNB
->
common_vars
,
l
,
l
,
proc
->
subframe_rx
<<
1
,
proc
->
subframe_rx
<<
1
,
0
,
0
,
0
0
);
);
slot_fep_ul
(
fp
,
slot_fep_ul
(
fp
,
...
@@ -2519,14 +2522,13 @@ void eNB_fep_full(PHY_VARS_eNB *eNB,eNB_proc_t *proc) {
...
@@ -2519,14 +2522,13 @@ void eNB_fep_full(PHY_VARS_eNB *eNB,eNB_proc_t *proc) {
if
(
eNB
->
node_function
==
NGFI_RRU_IF4p5
)
{
if
(
eNB
->
node_function
==
NGFI_RRU_IF4p5
)
{
/// **** send_IF4 of rxdataF to RCC (no prach now) **** ///
/// **** send_IF4 of rxdataF to RCC (no prach now) **** ///
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_SEND_IF4
,
1
);
send_IF4p5
(
eNB
,
proc
->
frame_rx
,
proc
->
subframe_rx
,
IF4p5_PULFFT
,
0
);
send_IF4p5
(
eNB
,
proc
->
frame_rx
,
proc
->
subframe_rx
,
IF4p5_PULFFT
,
0
);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_SEND_IF4
,
0
);
}
}
}
}
void
eNB_fep_rru_if5
(
PHY_VARS_eNB
*
eNB
,
eNB_proc_t
*
proc
)
{
void
eNB_fep_rru_if5
(
PHY_VARS_eNB
*
eNB
)
{
eNB_proc_t
*
proc
=&
eNB
->
proc
;
uint8_t
seqno
=
0
;
uint8_t
seqno
=
0
;
/// **** send_IF5 of rxdata to BBU **** ///
/// **** send_IF5 of rxdata to BBU **** ///
...
@@ -2536,8 +2538,9 @@ void eNB_fep_rru_if5(PHY_VARS_eNB *eNB,eNB_proc_t *proc) {
...
@@ -2536,8 +2538,9 @@ void eNB_fep_rru_if5(PHY_VARS_eNB *eNB,eNB_proc_t *proc) {
}
}
void
do_prach
(
PHY_VARS_eNB
*
eNB
,
eNB_proc_t
*
proc
)
{
void
do_prach
(
PHY_VARS_eNB
*
eNB
)
{
eNB_proc_t
*
proc
=
&
eNB
->
proc
;
LTE_DL_FRAME_PARMS
*
fp
=&
eNB
->
frame_parms
;
LTE_DL_FRAME_PARMS
*
fp
=&
eNB
->
frame_parms
;
// check if we have to detect PRACH first
// check if we have to detect PRACH first
...
@@ -2594,9 +2597,9 @@ void phy_procedures_eNB_common_RX(PHY_VARS_eNB *eNB){
...
@@ -2594,9 +2597,9 @@ void phy_procedures_eNB_common_RX(PHY_VARS_eNB *eNB){
LOG_D
(
PHY
,
"[eNB %d] Frame %d: Doing phy_procedures_eNB_common_RX(%d)
\n
"
,
eNB
->
Mod_id
,
frame
,
subframe
);
LOG_D
(
PHY
,
"[eNB %d] Frame %d: Doing phy_procedures_eNB_common_RX(%d)
\n
"
,
eNB
->
Mod_id
,
frame
,
subframe
);
if
(
eNB
->
fep
)
eNB
->
fep
(
eNB
,
proc
);
if
(
eNB
->
fep
)
eNB
->
fep
(
eNB
);
if
(
eNB
->
do_prach
)
eNB
->
do_prach
(
eNB
,
proc
);
if
(
eNB
->
do_prach
)
eNB
->
do_prach
(
eNB
);
...
...
targets/ARCH/ETHERNET/USERSPACE/LIB/eth_raw.c
View file @
50561347
...
@@ -224,7 +224,8 @@ int trx_eth_write_raw_IF4p5(openair0_device *device, openair0_timestamp timestam
...
@@ -224,7 +224,8 @@ int trx_eth_write_raw_IF4p5(openair0_device *device, openair0_timestamp timestam
eth
->
tx_nsamps
=
nblocks
;
eth
->
tx_nsamps
=
nblocks
;
memcpy
(
buff
[
0
],
(
void
*
)
&
eth
->
eh
,
MAC_HEADER_SIZE_BYTES
);
memcpy
(
buff
[
0
],
(
void
*
)
&
eth
->
eh
,
MAC_HEADER_SIZE_BYTES
);
bytes_sent
=
send
(
eth
->
sockfd
[
Mod_id
],
bytes_sent
=
send
(
eth
->
sockfd
[
Mod_id
],
buff
[
0
],
buff
[
0
],
packet_size
,
packet_size
,
...
...
targets/ARCH/ETHERNET/USERSPACE/LIB/ethernet_lib.c
View file @
50561347
...
@@ -83,7 +83,7 @@ int trx_eth_start(openair0_device *device) {
...
@@ -83,7 +83,7 @@ int trx_eth_start(openair0_device *device) {
}
}
/* adjust MTU wrt number of samples per packet */
/* adjust MTU wrt number of samples per packet */
if
(
ethernet_tune
(
device
,
MTU_SIZE
,
RAW_IF4p5_PRACH_SIZE_BYTES
)
!=
0
)
return
-
1
;
if
(
ethernet_tune
(
device
,
MTU_SIZE
,
RAW_IF4p5_PRACH_SIZE_BYTES
)
!=
0
)
return
-
1
;
if
(
ethernet_tune
(
device
,
RCV_TIMEOUT
,
5000
)
!=
0
)
return
-
1
;
if
(
ethernet_tune
(
device
,
RCV_TIMEOUT
,
999999
)
!=
0
)
return
-
1
;
}
else
if
(
eth
->
flags
==
ETH_UDP_IF4p5_MODE
)
{
}
else
if
(
eth
->
flags
==
ETH_UDP_IF4p5_MODE
)
{
...
...
targets/RT/USER/lte-enb.c
View file @
50561347
This diff is collapsed.
Click to expand it.
targets/RT/USER/lte-softmodem.c
View file @
50561347
This diff is collapsed.
Click to expand it.
targets/SIMU/USER/init_lte.c
View file @
50561347
...
@@ -70,6 +70,7 @@ PHY_VARS_eNB* init_lte_eNB(LTE_DL_FRAME_PARMS *frame_parms,
...
@@ -70,6 +70,7 @@ PHY_VARS_eNB* init_lte_eNB(LTE_DL_FRAME_PARMS *frame_parms,
NUMBER_OF_UE_MAX
,
NUMBER_OF_eNB_MAX
,
NUMBER_OF_HARQ_PID_MAX
);
NUMBER_OF_UE_MAX
,
NUMBER_OF_eNB_MAX
,
NUMBER_OF_HARQ_PID_MAX
);
LOG_I
(
PHY
,
"init eNB: N_RB_DL %d
\n
"
,
frame_parms
->
N_RB_DL
);
LOG_I
(
PHY
,
"init eNB: N_RB_DL %d
\n
"
,
frame_parms
->
N_RB_DL
);
LOG_I
(
PHY
,
"init eNB: Transmission mode %d
\n
"
,
transmission_mode
);
LOG_I
(
PHY
,
"init eNB: Transmission mode %d
\n
"
,
transmission_mode
);
LOG_I
(
PHY
,
"init eNB: prach_config_index %d
\n
"
,
frame_parms
->
prach_config_common
.
prach_ConfigInfo
.
prach_ConfigIndex
);
for
(
i
=
0
;
i
<
NUMBER_OF_UE_MAX
;
i
++
)
{
for
(
i
=
0
;
i
<
NUMBER_OF_UE_MAX
;
i
++
)
{
for
(
j
=
0
;
j
<
2
;
j
++
)
{
for
(
j
=
0
;
j
<
2
;
j
++
)
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment