Chapter 56 Joint Detection
Chapter 56 Joint Detection
The first round of dual-module joint debugging went more smoothly than expected.
Pipeline scheduler and parameter sharing engine pairing – ran for 48 hours without incident. Beam coordination and spectrum sensing pairing – ran for 48 hours without incident. Cross-pairing also passed.
"No problems in the first round, which means the interface definition of the single module is done well." Fang Ze showed a rare satisfied expression when he signed the joint debugging log.
Problems started to arise in the second round of three-module joint debugging.
When the pipeline scheduler, parameter sharing engine, and beam coordination modules are running simultaneously, the DSP's bus bandwidth becomes contentious. At the peak moment when all three modules access the off-chip memory simultaneously, the bus arbitrator cannot respond in time, resulting in a read timeout in the parameter sharing engine's circular buffer.
The timeout is only two milliseconds, but in a real-time system, a two-millisecond delay is enough for beamforming to miss a switching window.
Zuo Cheng stared at the lone timeout record in his log and remained silent for ten seconds.
"Bus priorities need to be reallocated," he said. "Beamcoaching has the highest real-time requirements, so its bus access priority must be first. The pipeline scheduler is second, and the parameter sharing engine is third."
Fang Ze modified the FPGA's bus arbitration logic and reprogrammed it. It ran for another 48 hours—without timing out.
But Zuo Cheng wasn't satisfied, so he added another round of stress tests—simulating the extreme scenario of fifteen satellites simultaneously in the field of view, pushing the load of the three modules to 120% of their design limit.
After running for six hours, the beam co-controller issued an alarm—the threshold for switching the hierarchical precision was falsely triggered by boundary conditions under extreme load, incorrectly upgrading a candidate star that should have been tracked using a simplified model to full-precision calculation, causing an instantaneous overload of computing power.
Tang Xu stared at the alarm log for twenty minutes, then modified three lines of code—adding a hysteresis interval to the judgment threshold to prevent the signal strength from repeatedly triggering precision switching when it oscillates around the threshold.
Three lines of code. A problem that might take an engineer three days to pinpoint, Tang Xu found the root cause in twenty minutes.
"Beamforming is my territory," Tang Xu said after finishing modifying the code, his tone as casual as if he were talking about what he ate that day.
The second round of joint testing was successful.
In mid-July, the third round of full-link joint testing began.
This round aims to connect the four modules of 402 with the terminal collaboration interface developed by Dingxin Information, and run the complete signal processing link on the same hardware platform—from satellite signal reception to spectrum sensing, to pipeline scheduling, to beam collaboration, to terminal collaboration, and to connect the entire chain.
Dingxin's CTO brought two engineers to 402 for on-site debugging. The three of them carried two laptops and a box of debugging tools into the 402 office and set up a temporary worktable in the corner.
Problems arose on the very first day.
The status data packet format sent by Dingxin's terminal collaboration interface to the 402 module does not match the parsing code on the 402 side.
"We developed it according to the interface specification document V2.3," said the Dingxin engineer, pointing to the data packet structure on the screen. "The status bar starts at the sixteenth byte and is four bytes long."
Chen Hao showed the 402 interface code: "We also developed it according to V2.3. But our parsing starts reading the status bar from the twelfth byte."
The two people stared at each other for three seconds.
Zuo Cheng picked up the interface specification document and flipped to the corresponding page. After looking at it for thirty seconds, he found the problem—there was an ambiguity in the offset description of the status bar in the V2.3 version of the document. The original text said "offset 12 bytes (including header)", but the length of the header itself is four bytes or eight bytes in different modes. Dingxin calculates the offset as sixteen based on the largest header, while 402 calculates the offset as twelve based on the smallest header.
"It's the document's fault." Zuo Cheng put the document down. "Don't dwell on who's right or wrong. Perform dynamic parsing based on the actual header length—read the mode field of the header, then determine the offset of the status field based on the mode. Fix both sides, finish before you leave work today."
The engineer from Dingxin glanced at their CTO. The CTO nodded.
By 6 PM that afternoon, the code on both sides had been modified. Reconnection was successful—data packet parsing was correct, and state synchronization was normal.
But this was just the first interface issue. Over the next two weeks, seven or eight similar integration problems emerged—inconsistent timestamp precision, mismatched heartbeat intervals, conflicting exception status code definitions, and different assumptions regarding endianness. Each problem was minor, but each required engineers from both sides to sit down and go through the code line by line.
Over the past two weeks, Zuo Cheng has played not only the technical lead for the 402 error but also the coordinator between the two teams. Whenever disagreements arose, he would first review the documentation, then the code, and finally provide a solution acceptable to both sides. He didn't favor his own people, didn't shirk responsibility, and only focused on the most efficient way to resolve the problem.
On the tenth day of the joint debugging, Dingxin's technical director made a private phone call to Wang Jianping. Zuo Cheng didn't know what he said, but the next day Wang Jianping sent Zuo Cheng a message: "Your joint debugging style has taught my people a lot. Let's have more opportunities to cooperate in the future."
At the end of July, the final test of the full-link integration was 72 hours of continuous stability operation.
Before the test began, Zuo Cheng checked every parameter. One hundred and twenty satellite signal simulation inputs were used, and all four core modules plus the terminal collaboration interface were online. Data flowed continuously from the signal receiver to the terminal collaboration output without interruption, error, or exceeding the delay limit.
He pressed the start button.
The first 24 hours – zero anomalies.
The second 24 hours – zero anomalies.
In the nineteenth hour of the third twenty-four-hour period, which is the sixty-seventh hour of total runtime, a warning appeared in the system log: the version number of the circular buffer of the parameter sharing engine has wrapped around once.
Zuo Cheng's heart skipped a beat.
He immediately checked the detailed logs. The version number was a 32-bit unsigned integer, and the theoretical wraparound cycle was over four billion writes. However, in actual operation, the parameter update frequency was far higher than the design expectation—because during full-link integration testing, parameter requests from all modules converged, resulting in an update frequency five times that of single-module testing.
The wrapping of the version number itself is not a problem—wrapping of unsigned integers is a natural mathematical behavior. However, if any module uses signed comparison when comparing version numbers, a logical error will occur at the moment of wrapping.
He spent five minutes searching through the code for all the statements that compared version numbers.
There are seven comparisons, six of which use unsigned comparisons.
The seventh point—a boundary check function in the pipeline scheduler—uses signed comparison.
The code was written by Fang Ze.
Zuo Cheng didn't call himself Fang Ze; he changed that line of code himself. He changed the signed comparison to an unsigned comparison, just for the difference of a single word.
After making the changes, he restarted the test.
The last five hours – zero anomalies.
The 72-hour stability test has been passed.
A quiet round of applause filled the office. Unlike the applause during the architecture acceptance three months ago, this applause carried a sense of relief, as if they had survived a close call.
Zuo Cheng stood in front of the hardware platform, looking at the steadily fluctuating data curve on the screen, and took a deep breath.
August 1st. Prototype delivered.
He did it.
blenderwars