|
Tài trợ cho PIC Vietnam |
PIC và Robot trên nền Ubuntu Đây là một chủ trương mới mà chúng ta cần chú ý. |
|
Ðiều Chỉnh | Xếp Bài |
15-09-2015, 12:33 AM | #1 |
Đệ tử 1 túi
Tham gia ngày: Dec 2005
Bài gửi: 12
: |
Lập trình PIC trên linux (XC16, ASM30, Pickit2)
Chào các bạn,
Lâu nay không đóng góp gì, hôm nay sẵn vợ con dắt nhau qua hàng xóm ở nên rãnh được tí, mình kể lại kinh nghiệm lập trình với PIC, dsPIC trên linux. Vì cũng ít thấy ở VN người ta chia sẻ về linux, nên mạo muội chia sẻ chút xíu, hy vọng được góp ý. Arigatou! Mình hiện dùng Manjaro, dựa trên Arch. Nhưng bạn dùng Ubuntu, Linux Mint hay Linux distro khác cũng tương tự. 1. Để viết code, mình dùng chương trình Mousepad. Ở distro khác thì có thể dùng Gedit... Điểm mạnh của các editor mặc định này so với Notepad trên windows đó là nó hỗ trợ high-light rất nhiều định dạng code. Ví dụ bạn soạn thảo một file văn bản main.c hoặc main.py thì nó sẽ định dạng màu sắc cho văn bản đó dựa trên code C hoặc Python để dễ làm việc. (Có vẻ tương tự Notepad++ nhỉ). Dù sao thì mình không muốn dùng MPLABX IDE hoặc MPLAB 8 vì lý do máy quá cùi, không chạy mượt để mà lập trình được, và hơn nữa mình cũng chả cần tới mấy tính năng quản lý project cao cấp trên IDE. Mousepad trên Manjaro. 2. Để biên dịch, mình cài XC16 từ Microchip, bản dành cho Linux. Hiện tại thì XC16 có vẻ là lựa chọn tối ưu để biên dịch cho dsPIC trên linux. Mình có biết SDCC nhưng không rõ nó có hỗ trợ dsPIC chưa. Dù sao đi nữa nếu có trình biên dịch nào mã nguồn mở mình sẽ dùng. Hiện tại chưa tìm được nên đành hài lòng với XC16, bản miễn phí. http://www.microchip.com/pagehandler...tools/mplabxc/ Sau khi cài xong, thường thì xc16 sẽ nằm ở /opt/microchip/xc16/. Nếu không có, bạn dùng lệnh này để tìm vị trí cài xc16 Code:
locate xc16-gcc Code:
cd /home/username/project/ /opt/microchip/xc16/v1.25/bin/xc16-gcc main.c -mcpu=30F4011 -Wl,--script=p30F4011.gld /opt/microchip/xc16/v1.25/bin/xc16-bin2hex a.out mv a.hex main.hex Để tiện lợi thì tốt nhất bạn tạo một file text, với nội dung như sau, ví dụ lưu thành tên file là compile.sh Nội dung file compile.sh Code:
#!/usr/bin/bash # This script compile file main.c into main.hex # Use for XC16 and dsPIC30F4011. /opt/microchip/xc16/v1.25/bin/xc16-gcc main.c -mcpu=30F4011 -Wl,--script=p30F4011.gld /opt/microchip/xc16/v1.25/bin/xc16-bin2hex a.out mv a.hex main.hex Sau đó cho file compile.sh quyền thực thi: Code:
sudo chmod +x compile.sh Code:
./compile.sh Để quá trình biên dịch dễ dàng không báo lỗi, bạn nên copy các file mô tả của dsPIC vào cùng thư mục với file C. Ví dụ mình đang lập trình dsPIC30F4011, mình copy 2 file p30F4011.h và p30F4011.gld vào cùng thư mục file main.c, vậy là ok không lo trình biên dịch báo lỗi không tìm đc file. Cũng như trên, muốn biết file p30F4011.h hoặc gld nằm ở đâu, dùng lệnh Code:
locate p30F4011.h 3. Để nạp vào dsPIC, mình dùng mạch PICkit2 và chương trình pk2cmd. Microchip có cung cấp source code ở đây, mình lấy về và cài. Hoặc trên Manjaro thì trong Repo có cái pk2cmd-plus. Nếu bạn dùng mạch nạp khác hoặc ứng dụng khác, thì chắc có cách riêng của nó. Pk2cmd có bản dành cho windows, mình biết là PICkit2 có GUI cho windows, nhưng dùng command line có cái hay của nó, rất nhanh và tự động hóa được một số bước. Để nạp file main.hex vào dspic, mình dùng lệnh sau: Code:
pk2cmd -P DSPIC30F4011 -M -F main.hex Code:
mousepad ~/.bashrc #Nếu dùng editor khác thì đổi tên lệnh chỗ này, ví dụ gedit ... Code:
alias pk="pk2cmd -PDSPIC30F4011 -M -F" Code:
pk main.hex 4. Về bootloader, để làm việc tiện lợi thật không thể thiếu nó. Mình cũng vò đầu bứt tai với tinybootloader trên linux. Mới đầu còn chưa hiểu tí gì về bootloader nên rất khó khăn. Để "biên dịch" (assemble - dịch thế nào nhỉ?) file bootloader, mình sẽ dùng XC16 luôn. Và chỗ này là chỗ command line làm tốt việc còn GUI ko được nè. Không rõ có phải thế không, nhưng có vẻ từ XC16 đã không còn cái gọi là ASM30 nữa, mà XC16 sẽ assemble ASM cho dsPIC luôn. Vì vậy bạn hoàn toàn có thể assemble cho dsPIC trên MPLABX, nhưng mình đã thử, và có một điểm khó chịu. Bootloader chỉ chiếm khoảng 87 words cuối của Flash dsPIC, nhưng khi assemble xong, lại lòi đâu ra thêm một đống lệnh từ địa chỉ 0x100 trở đi. Việc này làm cho bootloader không chay được bình thường. Vò đầu bứt tai thì ra là bởi XC16 chạy trên MPLABX, khi assemble nó lại đem một số "macro" của C ra dùng. Ở đoạn 0x100 là đoạn khởi tạo environment, stack các kiểu... Trong khi chúng ta không cần tới. Vì vậy mình đã thử tìm hiểu dùng command line xem sao. Kết quả rất OK. Như sau: Tạo một file có tên asm.sh với nội dung như sau: Code:
#!/usr/bin/bash #This script to execute commands to assemble dsPIC .s file into Intel Hex file for burning later. #Assembler: #input file=tinybld_ds30F4011.s #output file=tinybld_ds30F4011.o with format ELF, also create a list file named tinybld_ds30F4011.lst /opt/microchip/xc16/v1.25/bin/xc16-as -o tinybld_ds30F4011.o -p30F4011 -omf=elf -alsm -a=tinybld_ds30F4011.lst tinybld_ds30F4011.s #Linker: #input file=tinybld_ds30F4011.o #output file=tinybld_ds30F4011.out /opt/microchip/xc16/v1.25/bin/xc16-ld -omf=elf --script=p30F4011.gld --no-data-init tinybld_ds30F4011.o -o tinybld_ds30F4011.out #[Optional] Dump the Linked Object file to a file to examine: /opt/microchip/xc16/v1.25/bin/xc16-objdump tinybld_ds30F4011.out -D -s > tinybld_ds30F4011.objdmp #Convert Linked Object file into Intel HEX file for dspic: /opt/microchip/xc16/v1.25/bin/xc16-bin2hex tinybld_ds30F4011.out Cũng cho file này quyền thực thi: Code:
sudo chmod +x asm.h Code:
./asm.h Tới đây là đủ để mình viết code cho dsPIC trên linux rồi. Mấy bạn quan tâm thì cho ý kiến góp ý và cùng sử dụng linux nhé. Thực sự linux cực dễ dùng, và cái ý nguyện đằng sau linux và open source software, free software là rất hay. Mình từ bỏ windows được gần 10 năm rồi cũng vì thích linux. Làm việc với AVR, STM trên linux rất tự nhiên vì AVR chẳng hạn,, dùng trình biên dịch nguồn mở. Atmel hỗ trợ linux rất tích cực. Chỉ dạo gần đây thì Microchip mới bắt đầu ngó qua Linux, và việc MPLABX ra đời cho Linux là dấu hiệu tích cực của họ. Chương trình pk2cmd là do một nhóm người dùng-developer viết ra cho microchip thì phải. Cái này mình không biết rõ nên không dám chém nhưng có tò mò xem họ bàn về nó trên google group. Cái ý mình muốn nói khi viết bài này thì rõ ràng là xin các bạn hãy dùng linux. Trừ khi bạn có tiền mua bản quyền windows và các phần mềm trên đó. Còn không thì không có lý do gì không sử dụng linux cả (chà, trừ khi bạn mua máy MAC thì khác, mình chưa bao giờ rớ tới MAC nên không dám bàn). Bởi vì ở Linux, mình cảm thấy sự tự do mà mình khôg tìm được ở windows bản crack (và cả sự thư thản tâm hồn nữa ...vì mình không ăn cắp nữa). Trên linux, muốn hiển thị data từ cổng serial chẳng hạn, cũng chỉ một lệnh trên terminal, và nó hiển thị trên terminal luôn. Muốn vẽ đồ thì biểu diễn data nhận được theo thời gian thực, thì cũng chỉ cần vài lênh python. Và tất cả đều miễn phí. Ngay cả con máy Gateway LT27 cùi mía của mình còn chạy được linux, làm được những việc mình muốn làm như trên thì yeah, I love Linux. thay đổi nội dung bởi: ttai, 15-09-2015 lúc 12:43 AM. |
|
|