update .emac 2013

本文详细介绍了一个高度定制化的Emacs配置方案,包括字体设置、快捷键绑定、C/C++编程环境搭建、LaTeX编译配置等内容,旨在提升开发效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >



(if (eq system-type 'windows-nt)
    (setq file-name-coding-system 'gbk))
(custom-set-variables
  ;; custom-set-variables was added by Custom.
  ;; If you edit it by hand, you could mess it up, so be careful.
  ;; Your init file should contain only one such instance.
  ;; If there is more than one, they won't work right.
 '(TeX-output-view-style (quote (("^dvi$nnnnnnn" ("^landscape$" "^pstricks$\\|^pst-\\|^psfrag$") "%(o?)dvips -t landscape %d -o && gv %f") ("^dvi$" "^pstricks$\\|^pst-\\|^psfrag$" "%(o?)dvips %d -o && gv %f") ("^dvi$" ("^a4\\(?:dutch\\|paper\\|wide\\)\\|sem-a4$" "^landscape$") "%(o?)xdvi %dS -paper a4r -s 0 %d") ("^dvi$" "^a4\\(?:dutch\\|paper\\|wide\\)\\|sem-a4$" "%(o?)xdvi %dS -paper a4 %d") ("^dvi$" ("^a5\\(?:comb\\|paper\\)$" "^landscape$") "%(o?)xdvi %dS -paper a5r -s 0 %d") ("^dvi$" "^a5\\(?:comb\\|paper\\)$" "%(o?)xdvi %dS -paper a5 %d") ("^dvi$" "^b5paper$" "%(o?)xdvi %dS -paper b5 %d") ("^dvi$" "^letterpaper$" "%(o?)xdvi %dS -paper us %d") ("^dvi$" "^legalpaper$" "%(o?)xdvi %dS -paper legal %d") ("^dvi$" "^executivepaper$" "%(o?)xdvi %dS -paper 7.25x10.5in %d") ("^dvi$" "." "%(o?)xdvi %dS %d") ("^pdf$" "." "acroread %o %(outpage)") ("^html?$" "." "netscape %o"))))
 '(current-language-environment "UTF-8"))
(custom-set-faces
  ;; custom-set-faces was added by Custom.
  ;; If you edit it by hand, you could mess it up, so be careful.
  ;; Your init file should contain only one such instance.
  ;; If there is more than one, they won't work right.
 '(default ((t (:inherit nil :stipple nil :background "white" :foreground "black" :inverse-video nil :box nil :strike-through nil :overline nil :underline nil :slant normal :weight light :height 98 :width normal :foundry "adobe" :family "Adobe 宋体 Std")))))
 (prefer-coding-system 'utf-8)


;;(set-default-font "Consolas-14")
;;(set-fontset-font "fontset-default"
;;  'unicode '("微软雅黑" . "unicode-bmp"))


(set-fontset-font "fontset-default"
 'gb18030 '("Microsoft YaHei" . "unicode-bmp"))
(create-fontset-from-fontset-spec
"-misc-fixed-medium-r-*-*-16-*-*-*-c-*-fontset-global,
  chinese-gb2312:-*-*-medium-r-normal-*-16-*-*-*-*-*-gb2312.1980-*")
(setq default-frame-alist
      (append '((font . "fontset-global")) default-frame-alist))




(load-file "/usr/share/emacs/site-lisp/xcscope.el")
(require 'xcscope)


(load-file "/usr/share/emacs23/site-lisp/unicad.el")
(require 'unicad)
(define-key global-map [(control f3)]  'cscope-set-initial-directory)
(define-key global-map [(control f4)]  'cscope-unset-initial-directory)
(define-key global-map [(control f5)]  'cscope-find-this-symbol)
(define-key global-map [(control f6)]  'cscope-find-global-definition)
(define-key global-map [(control f7)]  'cscope-find-global-definition-no-prompting)
(define-key global-map [(control f8)]  'cscope-pop-mark)
(define-key global-map [(control f9)]  'cscope-next-symbol)
(define-key global-map [(control f10)] 'cscope-next-file)
(define-key global-map [(control f11)] 'cscope-prev-symbol)
(define-key global-map [(control f12)] 'cscope-prev-file)
(define-key global-map [(meta f9)]     'cscope-display-buffer)
(define-key global-map [(meta f10)]    'cscope-display-buffer-toggle)










(autoload 'ansi-color-for-comint-mode-on "ansi-color" nil t)
(add-hook 'shell-mode-hook 'ansi-color-for-comint-mode-on)




;; Load CEDET
(load-file "/usr/share/emacs/site-lisp/cedet-common/cedet.el")
(semantic-load-enable-semantic-debugging-helpers)
(add-to-list 'load-path "/usr/share/emacs/site-lisp/ecb")
(require 'ecb)








    (add-hook 'LaTeX-mode-hook (lambda()
                                  (add-to-list 'TeX-command-list '("XeLaTeX" "%`xelatex%(mode)%' %t" TeX-run-TeX nil t))
                                  (setq TeX-command-default "XeLaTeX")
                                     (setq TeX-save-query  nil )
                                      (setq TeX-show-compilation t)
                                                                   ))


;; AUCTeX
(defun auctex ()
  (add-to-list 'TeX-command-list '("XeLaTeX" "%`xelatex%(mode)%' %t; %`xelatex%(mode)%' %t" TeX-run-TeX nil t)) ;; 这里我编译了两次
    (setq TeX-command-default "XeLaTeX") ;; 设定默认编译命令为XeLaTeX
    (setq TeX-save-query nil)            ;; 保存之前不询问
    (setq TeX-show-compilation t))       ;; 在新窗口显示编译过程
(add-hook 'LaTeX-mode-hook 'auctex)








(defun my-latex-mode-hook ()
      (add-to-list 'TeX-command-list
                   '("XeLaTeX" "%`xelatex%(mode)%' %t" TeX-run-TeX nil t))
      (setq TeX-command-default
            (save-excursion
              (save-restriction
                (widen)
                (goto-char (point-min))
                (let ((re (concat "^\\s-*\\\\usepackage\\(?:\\[.*\\]\\)?"
                                  "{.*\\<\\(?:font\\|math\\)spec\\>.*}")))
                  (if (re-search-forward re 3000 t)
                      "XeLaTeX"
                    "LaTeX")))))) 


;If you want to make AUCTEX aware of style files and multi-file documents right away,
;insert the following in your ‘.emacs’ file.


(setq TeX-auto-save t)
(setq TeX-parse-self t)
(setq-default TeX-master nil)


(setq org-todo-keywords
 '((sequence "TODO" "DOING" "HANGUP" "|" "DONE" "CANCEL")))


(setq org-todo-keywords
      '((sequence "TODO(t)" "DOING(i!)" "HANGUP(h!)" "|" "DONE(d!)" "CANCEL(c!)")))






(setq load-path (cons "~/lib/emacs-lisp/org-7.01h/lisp" load-path))
(setq load-path (cons "~/lib/emacs-lisp/org-7.01h/contrib/lisp" load-path))


(require 'org-install)
(require 'org-publish)
(add-to-list 'auto-mode-alist '("\\.org\\'" . org-mode))
(add-hook 'org-mode-hook 'turn-on-font-lock)
(add-hook 'org-mode-hook 
  (lambda () (setq truncate-lines nil)))


(global-set-key "\C-cl" 'org-store-link)
(global-set-key "\C-ca" 'org-agenda)

(global-set-key "\C-cb" 'org-iswitchb)


;;--------------------------should be verify


(require 'cc-mode)
(c-set-offset 'inline-open 0)
(c-set-offset 'friend '-)
(c-set-offset 'substatement-open 0)


;;;;我的C/C++语言编辑策略


(defun my-c-mode-common-hook()
  (setq tab-width 4 indent-tabs-mode nil)
  ;;; hungry-delete and auto-newline
  (c-toggle-auto-hungry-state 1)
  ;;按键定义
  (define-key c-mode-base-map [(control \`)] 'hs-toggle-hiding)
  (define-key c-mode-base-map [(return)] 'newline-and-indent)
  (define-key c-mode-base-map [(f7)] 'compile)
  (define-key c-mode-base-map [(meta \`)] 'c-indent-command)
;;  (define-key c-mode-base-map [(tab)] 'hippie-expand)
  (define-key c-mode-base-map [(tab)] 'my-indent-or-complete)
  (define-key c-mode-base-map [(meta ?/)] 'semantic-ia-complete-symbol-menu)


  ;;预处理设置
  (setq c-macro-shrink-window-flag t)
  (setq c-macro-preprocessor "cpp")
  (setq c-macro-cppflags " ")
  (setq c-macro-prompt-flag t)
  (setq hs-minor-mode t)
  (setq abbrev-mode t)
)
(add-hook 'c-mode-common-hook 'my-c-mode-common-hook)


;;;;我的C++语言编辑策略
(defun my-c++-mode-hook()
  (setq tab-width 4 indent-tabs-mode nil)
  (c-set-style "stroustrup")
;;  (define-key c++-mode-map [f3] 'replace-regexp)
)


(load-file "~/lib/emacs-lisp/cedet-1.0pre3/common/cedet.el")
(setq semanticdb-project-roots 
      (list
        (expand-file-name "/")))
(defun my-indent-or-complete ()
   (interactive)
   (if (looking-at "\\>")
      (hippie-expand nil)
      (indent-for-tab-command))
 )


(global-set-key [(control tab)] 'my-indent-or-complete)
(autoload 'senator-try-expand-semantic "senator")


(setq hippie-expand-try-functions-list
      '(
        senator-try-expand-semantic
        try-expand-dabbrev
        try-expand-dabbrev-visible
        try-expand-dabbrev-all-buffers
        try-expand-dabbrev-from-kill
        try-expand-list
        try-expand-list-all-buffers
        try-expand-line
        try-expand-line-all-buffers
        try-complete-file-name-partially
        try-complete-file-name
        try-expand-whole-kill
        )
)
(define-key c-mode-base-map [(tab)] 'my-indent-or-complete)
(define-key c-mode-base-map [(meta ?/)] 'semantic-ia-complete-symbol-menu)


http://www.caole.net/diary/emacs_write_cpp.html


http://cx4a.org/software/auto-complete/index.html#User_Manual --autocomplete 

Auto Complete Mode



<think>好的,用户之前问过如何在同一驱动下分别调用两个网口,现在他们接着问:“上述在哪个文件修改,并且有哪些地方需要完善。”我需要先回顾之前的回答,再分析用户当前的疑问。 用户可能是在实际项目中遇到了问题,他们可能已经尝试按照之前的步骤配置,但遇到了困难,或者想了解具体在哪个代码文件中进行修改。之前的回答提到了代码示例,但用户现在需要知道这些代码应该放在哪个文件里,以及有哪些需要注意的地方。 首先,我需要确定用户使用的平台和环境。之前的回答提到lwIP和Xilinx的驱动(如xemacps),所以推测用户可能在使用Xilinx的FPGA或SoC,比如Zynq系列,运行基于FreeRTOS或类似实时操作系统的嵌入式系统。 接下来,用户想知道在哪个文件修改。根据之前的示例,代码涉及到驱动初始化、网络接口配置、数据收发处理等。这些代码可能分布在多个文件中,例如: 1. 网络接口初始化可能在主程序文件(如main.c)或者专门的网络配置文件中。 2. 驱动配置可能在Xilinx提供的驱动文件(如xemacps.c、xemacpsif.c)。 3. 中断处理可能在平台相关的文件或驱动中。 4. 应用层代码可能需要在自定义的文件中处理网络通信。 用户可能需要具体的文件路径或文件名,但由于不同项目结构不同,需要给出一般性的指导。例如,初始化代码可能在main.c,驱动配置在xemacpsif.c,中断处理在xilinx的中断控制器相关文件。 然后,用户问有哪些地方需要完善。之前的回答提到了常见问题,如驱动冲突、数据混杂、性能问题等。需要进一步细化这些问题的解决方案,例如如何调整DMA描述符,如何配置中断核心,或者如何在代码中实现MAC过滤。 另外,用户可能需要考虑多线程环境下的资源竞争,比如是否需要在访问网络接口时加锁,或者如何优化缓冲区管理以避免内存泄漏或溢出。此外,可能还需要错误处理机制,比如驱动初始化失败时的回退策略,或者网络连接断开后的重连机制。 安全性和稳定性也是需要考虑的,比如输入验证、防止缓冲区溢出攻击,或者看门狗定时器确保系统不会因网络问题而挂起。此外,日志和调试信息的输出,方便后续排查问题。 最后,用户可能希望了解如何测试这些修改,比如使用哪些工具或方法来验证双网口是否独立工作,或者如何进行压力测试以确保系统稳定性。可能还需要提到版本控制和文档记录的重要性,方便团队协作和后续维护。 总结来说,用户需要具体的文件位置指导和更详细的完善建议,涵盖代码结构、配置调整、错误处理、性能优化、安全性等方面。需要以清晰的结构分点回答,确保用户能够逐步实施并排查问题。</think>在基于Xilinx Zynq或类似平台(使用`xemacps`驱动 + lwIP协议栈)的嵌入式系统中,修改主要涉及以下文件和关键优化点: --- ### **一、核心修改文件清单** | 文件路径/名称 | 修改内容 | 作用说明 | |--|------------------------------------------|------------------------------| | `src/main.c` | 双网口`netif`结构体定义和初始化 | 主程序入口,网络接口配置 | | `lwipopts.h` | 调整`NUM_NETIF_CLIENT_DATA`等宏定义 | 扩展lwIP对多网口的支持 | | `platform/xemacpsif.c` | 修改`xemacpsif_init()`接收回调绑定 | 驱动与`netif`的绑定 | | `bsp/xparameters.h` | 检查`XPAR_XEMACPS_0_*`等设备ID定义 | 确保硬件实例ID正确 | | `中断配置相关文件` | 为GEM0和GEM3分配独立的中断服务程序 | 实现数据接收分流 | --- ### **二、关键修改点详解** #### **1. 主程序文件(`main.c`)** ```c /* 添加双网口初始化代码 */ void start_networking() { // 初始化GEM0(MIO网口) init_netif(&netif_mio, XPAR_XEMACPS_0_DEVICE_ID, 0x001122334455, // 自定义MAC地址 IP_ADDR(192,168,1,10)); // 初始化GEM3(EMIO网口) init_netif(&netif_emio, XPAR_XEMACPS_3_DEVICE_ID, 0x001122334456, // 不同MAC IP_ADDR(192,168,2,10)); } /* 自定义初始化函数 */ static void init_netif(struct netif *netif, u16 device_id, u8 mac[6], ip4_addr_t ip) { XEmacPs_Config *config = XEmacPs_LookupConfig(device_id); XEmacPs_Initialize(&emac_inst, config); // 设置MAC地址(关键!避免地址冲突) memcpy(netif->hwaddr, mac, 6); netif->hwaddr_len = 6; netif_add(netif, &ip, &netmask, &gw, &emac_inst, xemacpsif_init, ethernet_input); netif_set_default(netif); // 可选:设置默认网口 } ``` #### **2. 驱动适配文件(`xemacpsif.c`)** ```diff // 修改驱动初始化函数,绑定正确的netif err_t xemacpsif_init(struct netif *netif) { + // 获取当前EMAC实例的硬件地址(区分GEM0/GEM3) + u32 base_addr = XEmacPs_GetPhysicalAddress(&emac_inst); + if (base_addr == XPAR_XEMACPS_0_BASEADDR) { + netif->name[0] = 'm'; // MIO接口标记 + } else if (base_addr == XPAR_XEMACPS_3_BASEADDR) { + netif->name[0] = 'e'; // EMIO接口标记 + } } ``` -- ### **三、需要完善的关键点** #### **1. 硬件资源隔离** | 问题 | 解决方案 | |----------------------|-------------------------------------------------------------| | **DMA缓冲区冲突** | 在`xemacpsif.h`中为每个网口分配独立缓冲区:<br>`#define NUM_RX_BDS 32` → 改为64(避免共享时溢出) | | **中断竞争** | 在`xscugic.c`中为GEM0和GEM3分配不同CPU核心的中断响应:<br>```XScuGic_SetPriorityTriggerType(IntcInstance, XPAR_XEMACPS_0_INTR, 0xA0, 0x3);``` | #### **2. 协议栈优化** ```c // 在`lwipopts.h`中增加以下配置: #define LWIP_NUM_NETIF_CLIENT_DATA 2 // 允许每个netif保存私有数据 #define MEM_SIZE (32 * 1024) // 增大内存池(双网口需更多缓存) #define PBUF_POOL_SIZE 64 // 增加pbuf数量 ``` #### **3. 链路状态检测(针对无PHY的EMIO)** ```c // 在`xemacpsif.c`中强制设置链路为UP: void xemacpsif_update_link(struct netif *netif) { if (netif->name[0] == 'e') { // EMIO网口 netif_set_link_up(netif); // 绕过PHY检测 return; } // 原有PHY检测逻辑... } ``` #### **4. 安全增强** ```c // 在接收回调中过滤非法MAC(防止数据混杂) err_t ethernet_input(struct pbuf *p, struct netif *netif) { struct eth_hdr *ethhdr = p->payload; if (memcmp(ethhdr->dest.addr, netif->hwaddr, 6) != 0) { pbuf_free(p); // 丢弃非目标MAC的帧 return ERR_OK; } // 正常处理... } ``` --- ### **四、调试与验证方法** #### **1. 硬件寄存器检查** ```bash # 在Xilinx SDK中通过XSCT查看GEM寄存器: connect targets -set -filter {name =~ "Cortex-A9 #0"} mrd 0xE000B000 # 查看GEM0的CTRL寄存器 mrd 0xE000C000 # 查看GEM3的CTRL寄存器 ``` #### **2. 流量统计** ```c // 添加统计代码: printf("MIO网口TX包数: %lu\n", netif_mio.mib2_counters.ifoutucastpkts); printf("EMIO网口RX字节: %lu\n", netif_emio.mib2_counters.ifinoctets); ``` #### **3. 压力测试脚本** ```python # 使用Python同时测试双网口 import socket, threading def test_interface(ip): sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.connect((ip, 7)) # 假设开启echo服务 sock.send(b"stress_test") assert sock.recv(11) == b"stress_test" threading.Thread(target=test_interface, args=("192.168.1.10",)).start() threading.Thread(target=test_interface, args=("192.168.2.10",)).start() ``` --- ### **五、推荐代码结构** ``` project/ ├── src/ │ ├── main.c # 双网口初始化 │ ├── net_config.h # IP/MAC地址配置 ├── lwip/ │ ├── lwipopts.h # 协议栈参数调优 │ ├── port/ │ ├── xemacpsif.c # 驱动适配修改 ├── bsp/ │ ├── xparameters.h # 确认设备ID和基地址 │ ├── xinterrupt.c # 中断配置 ``` -- ### **六、常见陷阱与解决** 1. **MAC地址未正确设置** **现象**:双网口MAC相同导致交换机丢包。 **解决**:在`init_netif()`中显式设置`netif->hwaddr`。 2. **DMA描述符不足** **现象**:高流量时网口丢包。 **调试**:在`xemacpsif.c`中打印`TxBDRing.TotalCnt`和`RxBDRing.TotalCnt`。 3. **中断丢失** **优化**:在`xemacps_sinit.c`中为两个EMAC实例分配不同的中断优先级: ```c XEmacPs_SetHandler(&emac_mio, XEMACPS_HANDLER_DMASEND, mio_tx_handler); XEmacPs_SetHandler(&emac_emio, XEMACPS_HANDLER_DMASEND, emio_tx_handler); ``` --- 通过以上修改和优化,可确保双网口在共享驱动时稳定工作。建议配合`Wireshark`抓包分析(通过JTAG导出数据)和`perf`工具监控CPU负载。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值