ラベル Emacs の投稿を表示しています。 すべての投稿を表示
ラベル Emacs の投稿を表示しています。 すべての投稿を表示

2014年8月29日金曜日

PIC開発環境雑感

PICについてはやねうらお氏の有名ないますぐPICをやめてAVRに移行すべき10の理由他、いろんなところでdisられています。僕もそのことは知っていたのでPICを使おうと思ったときにちょっと腰が引けていたのですが、食わず嫌いは良くないので使ってみることにしました。

PICという名前が付いているコントローラには、CPUのコアアーキテクチャとして8ビット系と16ビット系と32ビット系があります。これらの間にはバイナリ互換性はありません。ペリフェラルが似ているだけです。そもそもPIC32になるとMIPSだし。

Microchip社からはMPLAB® XC: Compiler Solutionsというコンパイラが提供されていて、それぞれのアーキテクチャ向けにxc8、xc16、xc32が提供されています。有償版はけっこうお高くて1000ドル前後しますが、無償でも最適化オプションとして-O0、-O1だけしか使えない以外は別に制限はないようです。

それらのコンパイラを統合して、エディタ、デバッガまで含めた統合開発環境として、MPLAB® X Integrated Development Environment (IDE)が提供されています。こっちは無償。他のコンパイラと組み合わせても使えるようです。

xcコンパイラはgccベース、MPLAB XはNetbeansベースで作られていて、特にへんなカスタマイズはしていなくてわりと使いやすい印象を受けました。

コンパイラ、MPLAB XともにWindows、Linux、OSX版が提供されているのもよいです。
僕はOSXで使っているのですが、特に悩むこともなく、スムーズにインストールできました。

コマンドライン環境との相性もまあまあで、MPLAB Xで一度プロジェクトを設定すると、Makefileが作成されるので、コマンドラインからコンパイルすることができます。

僕の場合の開発フローは

  • MPLAB Xでプロジェクト作成および編集(ファイルの追加/削除など)
  • emacsで編集 → emacs上でコンパイル
  • MPLAB XでPICに書き込みおよびデバッガ起動
という感じになっています。なかなか幸せ。

2013年2月7日木曜日

フォントサイズを変更してもウインドウサイズが変わらないようにする

何いってるのかさっぱりわからん人も多いかと思いますが、Emacsを、Cygwinのminttyみたいに、フォントサイズをキーボードで変更してもウインドウサイズが変わらないようにするための設定を行なってみました。 以下のコードを.emacsのどっかに貼り付けるか、独立したファイルにしてrequireすれば良いです。 UbuntuやCentOS,OSXではうまく動いています。 NTEmacsだとなぜか微妙にウインドウサイズが変わっていってヤな感じ。
;;; -*- syntax: emacs-lisp; coding: iso-2022-jp-unix; -*-

;; フォントサイズを変更する
;; Emacsではフレームのサイズをピクセル単位で指定できない。
;; そのため、frame-parametersに
;;   current-pixel-width-marginと
;;   current-pixel-height-margin
;; という2つの属性を追加し、目標とするサイズと実際に設定されたサイズの誤差を記録しておく
;; 次回にサイズを設定するときにこれらの属性を用いて目標サイズを修正することで、
;; フォントサイズを変更してもEmacsのframeサイズがほぼ変化しないようにする。
;; *手動でframeサイズを変更した時に、以前の誤差が適用されてしまうのは許容する*
(defun change-font-size(sizediff)
  (if window-system
      ((lambda ()
  ;; frame-parametersにcurrent-pixel-width-marginとcurrent-pixel-height-marginがなかったら0を設定する
  (if (or (not (cdr (assoc 'current-pixel-width-margin (frame-parameters (selected-frame)))))
   (not (cdr (assoc 'current-pixel-height-margin (frame-parameters (selected-frame))))))
      (modify-frame-parameters (selected-frame)
          (list '(current-pixel-width-margin . 0)
         '(current-pixel-height-margin . 0))))
  ;; minttyみたいにフォントサイズを変更してもframeのサイズが変らないようにする
  ((lambda (current-pixel-width current-pixel-height)
     ;; フォントサイズ変更
     (set-face-attribute 'default (selected-frame) :height
    ((lambda (current new) (if (<= new 0) height new))
     (face-attribute 'default :height)
     (+ sizediff (face-attribute 'default :height))))
     ;; フレームサイズ調整
     (set-frame-size (selected-frame)
       (/ current-pixel-width (frame-char-width))
       (/ current-pixel-height (frame-char-height)))
     ;; 調整誤差をcurrent-pixel-width-marginとcurrent-pixel-height-marginに記録しておく
     (modify-frame-parameters (selected-frame)
         (list (cons 'current-pixel-width-margin (- current-pixel-width (frame-pixel-width)))
        (cons 'current-pixel-height-margin (- current-pixel-height (frame-pixel-height))))))
   ;; current-pixel-width-marginとcurrent-pixel-height-marginを加味してフレームサイズを調整する
   (+ (frame-pixel-width) (cdr (assoc 'current-pixel-width-margin (frame-parameters (selected-frame)))))
   (+ (frame-pixel-height) (cdr (assoc 'current-pixel-height-margin (frame-parameters (selected-frame))))))))))

(defun increase-font-size ()
  (interactive)
  (change-font-size 10))

(defun decrease-font-size ()
  (interactive)
  (change-font-size -10))

(global-set-key [C-mouse-4] 'increase-font-size)
(global-set-key [C-wheel-up] 'increase-font-size)
(global-set-key [C-mouse-5] 'decrease-font-size)
(global-set-key [C-wheel-down] 'decrease-font-size)

(define-key global-map (kbd "C-+") 'increase-font-size)
(define-key global-map (kbd "C--") 'decrease-font-size)