例如:complex..
import numpy as np A = np.array([1+2j, 3+4j, 5+6j]) np.save('Adata',A) B = np.load('Adata.npy') print(B)執行結果:
[1.+2.j 3.+4.j 5.+6.j]B 從 Adata.npy load 資料後,自動成為 complex type array.
import numpy as np A = np.array([1+2j, 3+4j, 5+6j]) np.save('Adata',A) B = np.load('Adata.npy') print(B)執行結果:
[1.+2.j 3.+4.j 5.+6.j]B 從 Adata.npy load 資料後,自動成為 complex type array.
import codecs import socket import time DCA1000IP = ('192.168.33.180',4096) sock = socket.socket(socket.AF_INET,socket.SOCK_DGRAM) sock.sendto(codecs.decode('5aa50300060001020102031eaaee','hex'),DCA1000IP) time.sleep(1) sock.sendto(codecs.decode('5aa509000000aaee','hex'),DCA1000IP) time.sleep(1) sock.sendto(codecs.decode('5aa505000000aaee','hex'),DCA1000IP)另外,停止的command 是..
sock.sendto(codecs.decode('5aa506000000aaee','hex'),DCA1000IP)
C:\ti\mmwave_studio_02_01_00_00\mmWaveStudio\PostProc>DCA1000EVM_CLI_Control.exe fpga cf.json FPGA Configuration command : SuccessPC -> DCA1000
0000 5a a5 03 00 06 00 01 02 01 02 03 1e aa ee Z.............DCA1000 --> PC
0000 5a a5 03 00 00 00 aa ee Z.......
C:\ti\mmwave_studio_02_01_00_00\mmWaveStudio\PostProc>DCA1000EVM_CLI_Control.exe start_record cf.json Start Record command : SuccessPC --&t; DCA1000
0000 5a a5 09 00 00 00 aa ee Z.......DCA1000 --> PC
0000 5a a5 09 00 00 00 aa ee Z.......PC --> DCA1000
0000 5a a5 05 00 00 00 aa ee Z.......DCA1000 --> PC
0000 5a a5 05 00 00 00 aa ee Z.......DCA1000 --> PC
0000 01 00 00 00 00 00 00 00 00 00 c8 00 99 ff d1 ff ................ 0010 25 01 47 fe 8a ff d0 ff 39 fe f0 00 59 00 25 ff %.G.....9...Y.%. 0020 7a 00 28 ff ed fe 7b 00 27 ff 40 00 14 01 98 fe z.(...{.'.@..... 0030 a6 ff f9 ff 83 ff 56 00 34 00 f5 fe 75 00 1f ff ......V.4...u... 0040 ce fe 10 01 37 00 72 ff f6 00 a0 fe a9 ff fb ff ....7.r......... 0050 28 fe 39 01 83 00 47 ff 4c 00 ed ff 1e ff 6e 00 (.9...G.L.....n. 0060 50 ff 4f 00 12 01 d6 fe 47 ff a9 00 ad ff 4a 00 P.O.....G.....J. 0070 59 00 8e ff 3b 00 90 ff d7 fe 21 01 f5 00 27 ff Y...;.....!...'. 0080 c7 00 6a ff 2e ff b1 00 fb fe 1d 01 da 01 6a fe ..j...........j. ...DCA1000 --> PC
0000 02 00 00 00 b0 05 00 00 00 00 6a 00 62 01 69 fe ..........j.b.i. 0010 89 00 13 00 36 fe fc 01 00 00 d2 ff 12 01 7c fe ....6.........|. 0020 c1 ff 1a 01 29 ff cd 00 cf 00 5e ff 0b 00 ff ff ....).....^..... 0030 2a ff 1a 01 67 00 ea ff 47 01 43 ff 98 ff 35 00 *...g...G.C...5. 0040 4d 00 c9 ff b5 00 56 ff dc ff 5d 00 b3 ff 62 00 M.....V...]...b. 0050 e0 00 b1 fe 84 00 fa ff 68 fe 5d 01 c2 ff b3 00 ........h.]..... 0060 39 01 80 ff 92 ff 0b 00 91 ff 4f 00 84 00 b1 ff 9.........O..... 0070 54 00 e6 ff 7b ff e6 00 ef ff 82 ff 36 00 aa ff T...{.......6... ...之後一堆 DCA1000 --> PC..
0000 5a a5 06 00 00 00 aa ee Z.......DCA1000 --> PC
0000 5a a5 06 00 00 00 aa ee Z.......
Examples: dca = DCA1000() adc_data = dca.read(timeout=.1) frame = dca.organize(adc_data, 128, 4 256)source code 中,DCA1000() class initialize function,就是設定好 socket, ip , port,和class variable。
ADC_PARAMS['chirps'] * ADC_PARAMS['rx'] * ADC_PARAMS['tx'] * ADC_PARAMS['IQ'] * ADC_PARAMS['samples'] * ADC_PARAMS['bytes']上面的dict 宣告在前面:
ADC_PARAMS = {'chirps' : 128, 'rx' : 4, 'tx' : 3, 'samples': 128, 'IQ' : 2 'bytes' : 2}IQ 大概是 I and Q (complex) 兩個都要,所以是 2
profileID startFreq idleTime adcStartTime rampEndTime txOutPower txPhaseShift freqSlopeConst txStartTime numAdcSamples digOutSampleRate hpfCornerFreq1 hpfCornerFreq2 rxGainsamples 其中的 numAdcSamples : number of ADC samples collected during "ADC Sample Time". Example: 256
rxChannelEn txChannelEn cascading numADCBits adcOutputFmtrx 其中的rxChannelEn :Receive antenna mask. e.g for 4 antenna, it's 0x1111b = 15
chirpStartIndex ChirpEndIndex NumberOfLoops numberOfFrames FramePeriodicityInMS TriggerSelect FrameTriggerDelaychirps NumberOfLoops : 一個 frame 要重複這個設定幾次
{ "DCA1000Config": { "dataLoggingMode": "multi", "dataTransferMode": "LVDSCapture", "dataCaptureMode": "ethernetStream", "lvdsMode": 2, "dataFormatMode": 3, "packetDelay_us": 10, "ethernetConfig": { "DCA1000IPAddress": "192.168.33.180", "DCA1000ConfigPort": 4096, "DCA1000DataPort": 4098 }, "ethernetConfigUpdate": { "systemIPAddress": "192.168.33.30", "DCA1000IPAddress": "192.168.33.180", "DCA1000MACAddress": "12.34.56.78.90.12", "DCA1000ConfigPort": 4096, "DCA1000DataPort": 4098 }, "captureConfig": { "fileBasePath": "C:\\mySavedData", "filePrefix": "datacard_record", "maxRecFileSize_MB": 1024, "sequenceNumberEnable": 1, "captureStopMode": "infinite", "bytesToCapture": 1025, "durationToCapture_ms": 1000, "framesToCapture": 5 }, "dataFormatConfig": { "MSBToggle": 0, "reorderEnable": 1, "laneFmtMap": 0, "dataPortConfig": [ { "portIdx": 0, "dataType": "complex" }, { "portIdx": 1, "dataType": "complex" }, { "portIdx": 2, "dataType": "complex" }, { "portIdx": 3, "dataType": "complex" }, { "portIdx": 4, "dataType": "complex" } ] } } }
udp : 只要 udp tcp : 只要 tcp not XXX : 不要 XXX 另外 and, or 命令也可以用
/** Data Index in the buffer - With bytes count (6 bytes) */
#define RECORD_DATA_BUF_INDEX 10
s32CtPktRecvSize = recvfrom(sRFDCCard_SockInfo.s32DataSock[u8DataTypeId],
s8ReceiveBuf, MAX_BYTES_PER_PACKET, 0,
(struct sockaddr *)&SenderAddr,
&s32SenderAddrSize);
...
memcpy(&u32CtPktNum, &s8ReceiveBuf[0], sizeof(UINT32));
memcpy(&u64BytesSentTillCtPkt, &s8ReceiveBuf[4], 6);
writeDataToBuffer_Inline(&s8ReceiveBuf[RECORD_DATA_BUF_INDEX],
(s32CtPktRecvSize - RECORD_DATA_BUF_INDEX),
false, false);
所以真的就是把後面的 rawdata 存起來...counter=1 for i=1:4:filesize-1 LVDS(1,counter ) = adcData(i ) + sqrt(-1)*adcData(i+2); LVDS(1,counter+1) = adcData(i+1) + sqrt(-1)*adcData(i+3); counter = counter+2 end
lvdsStreamCfg: subFrameIdx enableHeader dataFmt enableSW在 mmwave_sdk_03_03_00_03\docs\mmwave_sdk_user_guide.pdf 的 P.30 有lvdsStreamCfg 的參數說明:
switch(datPathObj->cliCfg->lvdsStreamCfg.dataFmt) { case 1: sessionCfg.u.hwCfg.dataFormat = CBUFF_DataFmt_ADC_DATA; break; case 2: sessionCfg.u.hwCfg.dataFormat = CBUFF_DataFmt_CP_ADC; break; case 3: sessionCfg.u.hwCfg.dataFormat = CBUFF_DataFmt_ADC_CP; break; case 4: sessionCfg.u.hwCfg.dataFormat = CBUFF_DataFmt_CP_ADC_CQ; sessionCfg.u.hwCfg.cqSize[0] = 0; sessionCfg.u.hwCfg.cqSize[1] = HSIHeader_toCBUFFUnits(datPathObj->datapathCQ.sigImgMonTotalSize); sessionCfg.u.hwCfg.cqSize[2] = HSIHeader_toCBUFFUnits(datPathObj->datapathCQ.satMonTotalSize);reference hwCfg.dataFormat 的好像是在 driver/cbuf
/*! @brief pointer to ADC buffer */ cmplx16ReIm_t *ADCdataBuf;好像是 ADC buffer。
DCA1000EVM_CLI_CONTROL command cfg.json最重要的就是 cfg.json 這個檔案,裡面有所有設定 (LVDS plane, DCA1000 IP address...etc)
fpga Configure FPGA eeprom Update EEPROM reset_fpga Reset FPGA reset_ar_device Reset AR Device start_record Start Record stop_record Stop Record record Configure Record delay dll_version Read DLL version cli_version Read CLI_Control tool version fpga_version Read FPGA version query_status Read status of record process query_sys_status DCA1000EVM System aliveness -h List of commands supported -q Quiet mode - No status display in the consoleDCA1000EVM and AWR1642BOOST board setup
C:\ti\mmwave_studio_02_01_00_00\mmWaveStudio\PostProc>DCA1000EVM_CLI_Control.exe fpga_version cf.json FPGA Version : 2.7 [Record]* cf.json 就是上面github project 內的。
sensorStop flushCfg dfeDataOutputMode 1 channelCfg 15 3 0 adcCfg 2 1 adcbufCfg -1 0 0 1 0 profileCfg 0 77 429 7 57.14 0 0 70 1 256 5209 0 0 30 chirpCfg 0 0 0 0 0 0 0 1 chirpCfg 1 1 0 0 0 0 0 2 frameCfg 0 1 16 0 100 1 0 lowPower 0 1 guiMonitor -1 1 1 0 0 0 1 cfarCfg -1 0 0 8 4 4 0 5120 cfarCfg -1 1 0 4 2 3 0 5120 peakGrouping -1 1 1 1 1 255 multiObjBeamForming -1 1 0.5 clutterRemoval -1 0 calibDcRangeSig -1 0 -5 8 256 extendedMaxVelocity -1 0 bpmCfg -1 0 0 1 lvdsStreamCfg -1 0 1 0 nearFieldCfg -1 0 0 0 compRangeBiasAndRxChanPhase 0.0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 measureRangeBiasAndRxChanPhase 0 1.5 0.2 CQRxSatMonitor 0 3 5 123 0 CQSigImgMonitor 0 127 4 analogMonitor 1 1 sensorStart要enable LVDS output的話,要修改一下 lvfdsStreamCfg 的參數,第三個要是 1:
lvdsStreamCfg -1 0 1 0用 TeraTerm 連上 AWR1642BOOST後,把上面 command copy 下來 (修改 lvdsStreamCfg) ,一次送出給 AWR1642BOOT。
C:\ti\mmwave_studio_02_01_00_00\mmWaveStudio\PostProc>DCA1000EVM_CLI_Control.exe fpga cf.json FPGA Configuration command : Success C:\ti\mmwave_studio_02_01_00_00\mmWaveStudio\PostProc>DCA1000EVM_CLI_Control.exe start_record cf.json Start Record command : Success可以看到開啟一個新視窗..start record...
"captureConfig": { "fileBasePath": ".\\Data\\",.. 所以這個path 要先 create 好..
Hi, Alternative 2 looks right for complex data. If you are able to capture, process with mmWave and look at packets with Wireshark. A great exercise to determine the data format, would be to : capture and process data View binary data captured with header information, my case located C:\ti\mmwave_studio_02_00_00_02\mmWaveStudio\PostProc\adc_data_Raw_0.bin View binary data captured without header information, my case located C:\ti\mmwave_studio_02_00_00_02\mmWaveStudio\PostProc\adc_data.bin and compare the 2 files above along with the data captured with Wireshark. A document that might help is Mmwave Radar Device ADC Raw Data Capture, look at section 5 on page 7 and 8. Alex
set PATH=%PATH%;C:\MinGW\msys\1.0\bin* 用字串符號括起來的話,反而會失效。
-X Enables X11 forwarding. This can also be specified on a per-host basis in a configuration file. X11 forwarding should be enabled with caution. Users with the ability to bypass file permissions on the remote host (for the user's X authorization database) can access the local X11 display through the forwarded connection. An attacker may then be able to perform activities such as keystroke monitoring. For this reason, X11 forwarding is subjected to X11 SECURITY extension restrictions by default. Please refer to the ssh -Y option and the ForwardX11Trusted directive in ssh_config(5) for more information. (Debian-specific: X11 forwarding is not subjected to X11 SECURITY extension restrictions by default, because too many programs currently crash in this mode. Set the ForwardX11Trusted option to “no” to restore the upstream behaviour. This may change in future depending on client-side improvements.) -Y Enables trusted X11 forwarding. Trusted X11 forwardings are not subjected to the X11 SECURITY extension controls. (Debian-specific: In the default configuration, this option is equivalent to -X, since ForwardX11Trusted defaults to “yes” as described above. Set the ForwardX11Trusted option to “no” to restore the upstream behaviour. This may change in future depending on client-side improvements.)
if (pGuiMonSel->rangeDopplerHeatMap == 1) { itemPayloadLen = obj->numRangeBins * obj->numDopplerBins * sizeof(uint16_t); message.body.detObj.tlv[tlvIdx].length = itemPayloadLen; message.body.detObj.tlv[tlvIdx].type = MMWDEMO_OUTPUT_MSG_RANGE_DOPPLER_HEAT_MAP; message.body.detObj.tlv[tlvIdx].address = (uint32_t) obj->detMatrix; tlvIdx++; totalPacketLen += sizeof(MmwDemo_output_message_tl) + itemPayloadLen; }所以要找 rangeDopplerHearMap enable 的地方。
static int32_t MmwDemo_CLIGuiMonSel (int32_t argc, char* argv[]) { MmwDemo_GuiMonSel guiMonSel; MmwDemo_message message; int8_t subFrameNum; if(MmwDemo_CLIGetSubframe(argc, argv, 8, &subFrameNum) < 0) { return -1; } /* Initialize the guiMonSel configuration: */ memset ((void *)&guiMonSel, 0, sizeof(MmwDemo_GuiMonSel)); /* Populate configuration: */ guiMonSel.detectedObjects = atoi (argv[2]); guiMonSel.logMagRange = atoi (argv[3]); guiMonSel.noiseProfile = atoi (argv[4]); guiMonSel.rangeAzimuthHeatMap = atoi (argv[5]); guiMonSel.rangeDopplerHeatMap = atoi (argv[6]); guiMonSel.statsInfo = atoi (argv[7]);這個function 是....
cliCfg.tableEntry[cnt].cmd = "guiMonitor"; cliCfg.tableEntry[cnt].helpString = "subFrameIdx detectedObjects logMagRange noiseProfile rangeAzimuthHeatMap rangeDopplerHeatMap statsInfo"; cliCfg.tableEntry[cnt].cmdHandlerFxn = MmwDemo_CLIGuiMonSel; cnt++;所以是 guiMonitor 的倒數第二個參數。
find . -type d -empty -not -path "./.git/*"這樣列出不包含 .git,所有的 empty folder.
find . -type d -empty -not -path "./.git/*" | xargs -I {} touch {}/.gitignore在每個 empty folder 都加上 .gitignore,之後再用 git add 加入 folder
Warning: License for package Android SDK Platform 28 not accepted.
FAILURE: Build failed with an exception.
* What went wrong:
Could not determine the dependencies of task ':app:compileDebugJavaWithJavac'.
> Failed to install the following Android SDK packages as some licences have not been accepted.
build-tools;28.0.3 Android SDK Build-Tools 28.0.3
[!] Android toolchain - develop for Android devices (Android SDK version 29.0.3)
• Android SDK at C:\Users\user\AppData\Local\Android\sdk
• Platform android-29, build-tools 29.0.3
• Java binary at: C:\Android\Android Studio\jre\bin\java
• Java version OpenJDK Runtime Environment (build 1.8.0_212-release-1586-b04)
X Android licenses not accepted.
To resolve this, run: flutter doctor --android-licenses
[!] Android Studio (version 3.6)
X Flutter plugin not installed; this adds Flutter specific functionality.
X Dart plugin not installed; this adds Dart specific functionality.
Doctor summary (to see all details, run flutter doctor -v): [√] Flutter (Channel stable, v1.17.1, on Microsoft Windows [Version 6.1.7601], locale zh-TW) [X] Android toolchain - develop for Android devices X Unable to locate Android SDK. Install Android Studio from: https://developer.android.com/studio/index.html On first launch it will assist you in installing the Android SDK components. (or visit https://flutter.dev/docs/get-started/install/windows#android-setup for detailed instructions). If the Android SDK has been installed to a custom location, set ANDROID_SDK_ROOT to that location. You may also want to add it to your PATH environment variable. [!] Android Studio (not installed) [√] VS Code, 64-bit edition (version 1.45.1) [!] Connected device ! No devices available ! Doctor found issues in 3 categories.
docker pull gitlab/gitlab-ce docekr run --detach --publish 8787:80 --name gitlab gitlab/gitlab-ce因為是 detach,所以 run as daemon..
$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 4d9e7128295e gitlab/gitlab-ce "/assets/wrapper" 8 seconds ago Up 3 seconds (health: starting) 22/tcp, 443/tcp, 0.0.0.0:8787->80/tcp gitlab這時候,開啟 ip:8787 是不通的..
docker attach gitlab進去後,會看到他在 run starting sequence 的 output,代表還沒啟動完畢...
-- attach 一個啟動時是 daemonize 的 container,好像退不出來... 所以用 docker logs -f gitlab之後用 any-host-ip:8787 舊可以access 到 gitlab login 畫面了。
$ docker exec -it gitlab bash root@1b10f96444f4:/# gitlab console -e production Unknown command. Run `gitlab help` for a list of available commands. root@1b10f96444f4:/# gitlab-rails console -e production -------------------------------------------------------------------------------- Ruby: ruby 2.7.5p203 (2021-11-24 revision f69aeb8314) [x86_64-linux] GitLab: 14.8.2 (c7be43f6dd3) FOSS GitLab Shell: 13.23.2 PostgreSQL: 12.7 ------------------------------------------------------------[ booted in 20.47s ] Loading production environment (Rails 6.1.4.6) irb(main):001:0> user = User.where(id: 1).first => #<User id:1 @root> irb(main):002:0> user.password = 'charles' => "charles" irb(main):003:0> user.password_confirmation = 'charles' => "charles" irb(main):004:0> user.save => false irb(main):005:0> user.password = 'charles123' => "charles123" irb(main):006:0> user.password_confirmation = 'charles123' => "charles123" irb(main):007:0> user.save => true irb(main):008:0> exit root@1b10f96444f4:/#exit exit
efault admin account has been configured with following details: Username: root Password: You didn't opt-in to print initial root password to STDOUT. Password stored to /etc/gitlab/initial_root_password. This file will be cleaned up in first reconfigure run after 24 hours.所以,應該去這裡(/etc/gitlab/initial_root_password) 看...
sudo docker run --detach \ --hostname gitlab.example.com \ --publish 443:443 --publish 80:80 --publish 22:22 \ --name gitlab \ --restart always \ --volume $GITLAB_HOME/config:/etc/gitlab \ --volume $GITLAB_HOME/logs:/var/log/gitlab \ --volume $GITLAB_HOME/data:/var/opt/gitlab \ --shm-size 256m \ gitlab/gitlab-ee:latest要先export GITLAB_HOME
Usage: tio [] Options: -b, --baudrate Baud rate (default: 115200) -d, --databits 5|6|7|8 Data bits (default: 8) -f, --flow hard|soft|none Flow control (default: none) -s, --stopbits 1|2 Stop bits (default: 1) -p, --parity odd|even|none Parity (default: none) -o, --output-delay Output delay (default: 0) -n, --no-autoconnect Disable automatic connect -l, --log Log to file -m, --map Map special characters -v, --version Display version -h, --help Display help See the man page for list of supported mapping flags. In session, press ctrl-t q to quit.
[tio 10:33:36] Key commands: [tio 10:33:36] ctrl-t ? List available key commands [tio 10:33:36] ctrl-t b Send break [tio 10:33:36] ctrl-t c Show configuration [tio 10:33:36] ctrl-t h Toggle hexadecimal mode [tio 10:33:36] ctrl-t l Clear screen [tio 10:33:36] ctrl-t q Quit [tio 10:33:36] ctrl-t s Show statistics [tio 10:33:36] ctrl-t t Send ctrl-t key code
ar1.FullReset() ar1.SOPControl(2) ar1.Connect(15,921600,1000) ar1.DownloadBSSFw("C:\\ti\\mmwave_studio_02_00_00_02\\mmWaveStudio\\Scripts\\..\\..\\rf_eval_firmware\\radarss\\xwr16xx_radarss.bin") ar1.DownloadMSSFw("C:\\ti\\mmwave_studio_02_00_00_02\\mmWaveStudio\\Scripts\\..\\..\\rf_eval_firmware\\masterss\\xwr16xx_masterss.bin") ar1.PowerOn(1,1000,0,0) ar1.RfEnable()設定Chirp, Frame and Capture Parameters
Int32 ar1.ChanNAdcConfig(UInt16 Tx0En, UInt16 Tx1En, UInt16 Tx2En, UInt16 Rx0En, UInt16 Rx1En, UInt16 Rx2En, UInt32 Rx3En, Int32 BitsVal, UInt32 FmtVal, UInt32 IQSwap) - Static device config API which defines configure both the Transmiter and Reciever channels of Radar device and also ADC data format output _I_ UInt16 Tx0En - Tx0 channel _I_ UInt16 Tx1En - Tx1 channel _I_ UInt16 Tx2En - Tx2 channel _I_ UInt16 Rx0En - Rx0 channel _I_ UInt16 Rx1En - Rx1 channnel _I_ UInt16 Rx2En - Rx2 channel _I_ UInt32 Rx3En - Rx3 channel[b15:0] + (CascadePinOutCfg[b31:16] b16:ClkOutMasterDis, b17:SynOutMasterDis, b18:ClkOutSlaveEna, b19:SynOutSlaveEna, b20:IntLOMasterEna, b21:OSCClkOutMasterDis) _I_ Int32 BitsVal - Number of ADC bits _I_ UInt32 FmtVal - ADC output format[b15:0] + FullScaleReductionFactor[b31:16] _I_ UInt32 IQSwap - ADC Mode[b15:0] + CascadeMode[b31:16](Single Chip: 0x0000, MultiChip Master:0x0001, MultiChip Slave:0x0002) Int32 ar1.LPModConfig(Int32 AnaChan, Int32 LpAdcMod) - LP Mod Config API which defines both Configure the ADC Mode and analog filter channel format _I_ Int32 AnaChan - Analog filter Chananel _I_ Int32 LpAdcMod - ADC Modecommand ...
ar1.ChanNAdcConfig(1, 1, 0, 1, 1, 1, 1, 2, 1, 0) ar1.LPModConfig(0, 1) ar1.RfInit()
[R4 Device/Type: iwr68xx/xwr68xx] Building file: ./mss/mss_main.c "./mss/mss_main.c", line 1853: error: identifier "SOC_XWR16XX_MSS_ADCBUF_BASE_ADDRESS" is undefinedSOC_XWR16XX_MSS_ADCBUF_BASE_ADDRESS 定義在 /common/sys_common_xwr16xx_mss.h
#if (defined(SOC_XWR16XX)) #ifdef SUBSYS_MSS #include所以要找 SOC_XWR16XX 有沒有 define:#endif
mmwave_sdk.mak:# PLATFORM_DEFINE : SOC_XWR14XX, SOC_XWR16XX, SOC_XWR18XX, SOC_XWR68XX mmwave_sdk_xwr16xx.mak:PLATFORM_DEFINE = SOC_XWR16XXmmwave_sdk.make:
ifeq ($(MMWAVE_SDK_DEVICE), awr14xx) include $(MMWAVE_SDK_INSTALL_PATH)/ti/common/mmwave_sdk_xwr14xx.mak else ifeq ($(MMWAVE_SDK_DEVICE), awr16xx) include $(MMWAVE_SDK_INSTALL_PATH)/ti/common/mmwave_sdk_xwr16xx.mak ..所以要找 MMWAVE_SDK_DEVICE..
@REM Select your device. Options (case sensitive) are: awr14xx, iwr14xx, awr16xx, iwr16xx, awr18xx, iwr18xx, awr68xx, iwr68xx set MMWAVE_SDK_DEVICE=iwr68xx要改 awr16xx
call C:/ti/mmwave_sdk_03_04_00_03/packages\scripts\ImageCreator\append_bin_crc\gen_bincrc32.exe xwr16xx_mmw_demo.bin
>>>def new_range(n):
... print('start')
... i = 0
... while i < n:
... print('a')
... yield i
... i += 1
...
...c = new_range(10)
...print(next(c))
start
a
0
...print(next(c))
a
1
可以對照一下function 內的 print('start') 和 print('a') 出現的位置。