2023年9月22日 星期五

STM32 -- 使用 vial 及 vibl

參考網址 


必須使用特製的 st-flash,stlink-stm32f10-opt-bytes,提供 "program option bytes" 的功能。其在燒錄 vibl 後,可將對

From the root of vial-qmk, run python3 util/vial_generate_keyboard_uid.py in order to generate a unique Vial keyboard ID:

-----------------
ajax@stm-dev /work/vial-qmk $ python3 util/vial_generate_keyboard_uid.py 
#define VIAL_KEYBOARD_UID {0xA3, 0xA1, 0xFF, 0x29, 0xE9, 0x28, 0xCC, 0xCC}
-----------------

-----------------
ajax@stm-dev /work $ st-flash opterase
st-flash 1.5.1
2023-09-23T08:19:06 INFO usb.c: -- exit_dfu_mode
2023-09-23T08:19:07 INFO common.c: Loading device parameters....
2023-09-23T08:19:07 INFO common.c: Device connected is: F1 Medium-density device, id 0x20036410
2023-09-23T08:19:07 INFO common.c: SRAM size: 0x5000 bytes (20 KiB), Flash: 0x20000 bytes (128 KiB) in pages of 1024 bytes
2023-09-23T08:19:07 WARN common.c: Unlocking option flash

ajax@stm-dev /work/vibl/bootloader/build $ st-flash write ../../misc/opt-head.bin 0x1FFFF800
st-flash 1.5.1
2023-09-23T08:21:33 INFO common.c: Loading device parameters....
2023-09-23T08:21:33 INFO common.c: Device connected is: F1 Medium-density device, id 0x20036410
2023-09-23T08:21:33 INFO common.c: SRAM size: 0x5000 bytes (20 KiB), Flash: 0 bytes (0 KiB) in pages of 1024 bytes
2023-09-23T08:21:33 WARN common.c: Unlocking option flash

ajax@stm-dev /work/vibl/bootloader/build $ st-flash write bootloader-magic_tpk_68.bin  0x8000000
------------------

使用 STM32 ST-LINK Utility 比較穩定可靠。另外,必須將開發板的 Boot0 切換到 1 (3.3V),ST-LINK Utility 才能連上。Boot0 不接時,會下拉成 0。但是使用 st-flash 則不用管 Boot0 的位置。

使用 ST-LINK Utility 寫入的順序如下。

  • opt-default.bin (size: 0x0010) => 0x1FFFF800
  • opt-head.bin (size: 0x0002)  => 0x1FFFF800
  • bootloader-magic_tpk_68.bin => 0x8000000
  • opt-tail.bin => 0x1FFFF802

在寫入保護之後,假若執行 "Erase Chip",會出現 "Some flash pages are write protected!" 的錯誤。

再次從 0x8000000 寫入資料會顯示如下的資料。

09:28:20 : [bootloader-magic_tpk_68.bin] opened successfully.
09:28:20 : [bootloader-magic_tpk_68.bin] checksum : 0x00043E9E 
09:28:29 : Some flash sectors are write protected.
           The write protection will be disabled then restored after flash programming
           in case there is no option bytes segment within the file.
09:28:29 : Memory programmed in 0s and 343ms.
09:28:29 : Verification...OK

但反覆測試,不太確定正確的該如何做。假如不成功,就試另一種方法吧。


2023年9月18日 星期一

使用 SQL Server 的 BCP, 將 Visual FoxPro 的大量資料匯入到 SQL Server

在微軟尚發行 32位元的 Windows 10 時,可以使用 SQL Server 2008 的匯入功能,配合微軟提供的 VFP odbc driver,將VFP的資料匯入到 SQL Server。但後來微軟只發行 64位元的 Windows OS 後, VFP odbc driver 就無法使用了,必須用其他方法匯入資料。

自己寫程式一筆一筆 insert,是最直接明瞭的方法,但效率非常非常慢。最快的方式是使用微軟提供的 BCP (Bulk Copy Program),經測試,40多萬筆的資料,花費的時間在 10秒以內。

參見 


下面的文章是 VFP 愛用者社區討論中引用的微軟官方文件,但原始文件已下架。可能是使用翻譯軟體轉成中文,有一些不通順的地方,稍微做一些修改。

-------------

這是微軟提供的,看樣子要研究研究一下 bcp,因為還不太了解怎麼用 bcp
http://support.microsoft.com/kb/153199/zh-tw

如何使用 SQL Server 大量複製程式, 從 Visual FoxPro 大量的資料移動到 SQL Server

文章編號 : 153199
上次校閱 : 2007年2月12日
版次 : 4.1

結論

本文告訴您如何使用大量複製程式 (BCP),Microsoft SQL Server 隨附的獨立公用程式。 如果您必須同時移動大量的資料至 SQL Server, 使用 Microsoft Visual FoxPro 「 SQL 轉換精靈 」 可能會太慢。 Bulk Copy Program 公用程式只能傳送資料, 它不會建立資料表。 您可以使用 「 SQL 轉換精靈 」 來建立資料表,或您自己用 ISQL / W 建立。 為了要讓 SQL 伺服器接受 (Accept) 使用 「 快速 」 版本的 BCP 資料,您必須執行 sp_dboption 系統預存程序將 select into / bulkcopy 選項設為 True


逐步說明範例

以下的範例步驟,使用 BCP 公用程式將資料從一個 ASCII 檔案傳送至 SQL Server:

1. 從 SQL Server 執行:
sp_dboption Mydatabase,bulkcopy,true

2. 從 Visual FoxPro 資料表建立使用定位點 (TAB) 分隔的 ASCII 檔案。 舉例來說,請使用低階的常式,以輸出到文字檔的欄位:
=FPUTS(fhandle, emp_id + CHR(9) + ;
  last_name + CHR(9) + ;
  first_name + CHR(9) + ;
  title + CHR(9) + ;
  PADR(DTOC(birth_date)+' '+'12:00AM',16,' ') + CHR(9) + ;
  PADR(DTOC(hire_date)+' '+ '12:00AM',16,' ') + CHR(9) + ;
  address + CHR(9) + ;
  city + CHR(9) + ;
  region + CHR(9) + ;
  postalcode + CHR(9) + ;
  STR(salary,12,2) )


3. 建立 bcp 格式檔案才能傳送資料。 例如, 從 SQL Server 下 bin 目錄:
bcp mydatabase.dbo.employee out c:\temp\emp.txt /Sservename /Usa /Ppassword
注意: 這個命令應該是在同一行。

4. 請遵循提示, 和型別 \t 如為每個欄位欄位終端子。

5. 出現提示時, 使用有意義的名稱, 例如 employee.fmt 儲存格式檔案。

6. 使用 MS - DOS 編輯器來編輯  .fmt 檔。

7. 在下列範例使用 employee.fmt 為變更為每個資料列第二欄為 SYBCHAR:
6.0
11
1 SYBCHAR 0 6 "\t" 1 emp_id
2 SYBCHAR 0 20 "\t" 2 last_name
3 SYBCHAR 0 10 "\t" 3 first_name
4 SYBCHAR 0 30 "\t" 4 title
5 SYBCHAR 0 16 "\t" 5 birth_date
6 SYBCHAR 0 16 "\t" 6 hire_date
7 SYBCHAR 0 60 "\t" 7 address
8 SYBCHAR 0 15 "\t" 8 city
9 SYBCHAR 0 15 "\t" 9 region
10 SYBCHAR 0 10 "\t" 10 postalcode
11 SYBCHAR 0 8 "\r\n" 11 salary

8. 檔案結尾 (EOF) 標記為變更第五資料行中的最後一列為 "\r\n"。

9. 將 ASCII 檔案傳輸至 SQL Server 使用 BCP 如下所示:
bcp mydatabase.dbo.employee in c:\temp\employ.txt /f employee.fmt /S servernamec /Usa /P"pwd"

10. 回為使用步驟 1 以 FALSE 參數 FALSE, 完成時設定 Bulkcopy 選項。

另請參閱

如需詳細資訊, 請參閱 SQL Server Administrator ' s 系統 Guide。

--------------------------------------------------------------------------------
這篇文章中的資訊適用於:
• Microsoft Visual FoxPro 3.0 Standard Edition
• Microsoft Visual FoxPro 3.0b Standard Edition
• Microsoft Visual FoxPro 6.0 Professional Edition
• Microsoft Visual FoxPro 7.0 Professional Edition
• Microsoft Visual FoxPro 8.0 Professional Edition
• Microsoft Visual FoxPro 9.0 Professional Edition

關鍵字: kb3rdparty kbhowto kbinterop KB153199 KbMtzh kbmt

--------------------------------------------------------------------------------

需下載並安裝 sqlcmd,才能執行 bcp

--------
C:\temp>bcp [rtcourse-tst].[caucgi].[dept2] out "c:\temp\tst.txt" -c -t  -S localhost -U agee
密碼:
開始複製...
已複製 357 個資料列。
網路封包大小 (位元組): 4096
時間 (毫秒) 總計     : 1      平均 : (每秒 357000.00 資料列)
C:\temp>bcp [rtcourse-tst].[caucgi].[dept2] format nul -c -f "c:\temp\tst.fmt" -c -t  -S localhost -U agee
警告: -c 覆寫 -c。
密碼:
--------------


2023年9月10日 星期日

klipper - 多色列印

參考 Prusaslicer 的 Color change。可以在要換顏色的層手動插入 G-code M600。 對應 M600 macro 要做的事,暫停列印,退出 filament,發出 "嗶" 聲。等換好線後,載入 filament,然後按恢復列印。

Klipper 的 macro 可以參考 klipper/config/sample-macros.cfg,將對應 M600 的段落擷取如下

------------------------------------------------
######################################################################
# Filament Change
######################################################################

# M600: Filament Change. This macro will pause the printer, move the
# tool to the change position, and retract the filament 50mm. Adjust
# the retraction settings for your own extruder. After filament has
# been changed, the print can be resumed from its previous position
# with the "RESUME" gcode.

[pause_resume]

[gcode_macro M600]
gcode:
    {% set X = params.X|default(50)|float %}
    {% set Y = params.Y|default(0)|float %}
    {% set Z = params.Z|default(10)|float %}
    SAVE_GCODE_STATE NAME=M600_state
    PAUSE
    G91
    G1 E-.8 F2700
    G1 Z{Z}
    G90
    G1 X{X} Y{Y} F3000
    G91
    G1 E-50 F1000
    RESTORE_GCODE_STATE NAME=M600_state
----------------
--------------------------------

G90 - Absolute Mode;G91 - Relative Mode

G0, G1 - Linear Move

G1 [E<pos>] [F<rate>] [X<pos>] [Y<pos>] [Z<pos>]






網誌存檔