R Field - 2019年6月
type: channel
link: http://www.ramlife.org/2019/06/
description: 通玄小论
items: stm32h7 hal 库的学习
items: hard fault 学习记录
items: event recorder 学习手记
items: gentoo 修改键盘映射
items: Upgrade to 17.1 from 17.0 problem:UnicodeEncodeError: 'ascii' codec can't encode character '\xc4' in position 50: ordinal not in range(128)
items: tortoiseGit 的简单使用说明
items: freefilesync

stm32h7 hal 库的学习
type: item
date: 2019-06-25T17:34:00+08:00
description: stm32h7xx_hal_conf.h 中需要注意的几个地方： HSE_VALUE 这个外接晶振的频率 TICK_INT_PRIORITY 这个 tick 的中断优先级，因为 HAL_DELAY 这个函数是基于这个 tick 的中断的，所以如果有其他高优先级的中断中调用了 HAL_DELAY 函数，会造成 tick 的中断一直进不来。这样的话 HAL_DELAY 也会一直卡住，这个高优先级的中断也会一直卡在这里。 断言的参考实现函数。 /* ********************************************************************************************************* * 函 数 名: assert_failed * 形 参：file : 源代码文件名称。关键字__FILE__表示源代码文件名。 * line ：代码行号。关键字 __LINE__ 表示源代码行号 * 返 回 值: 无 ********************************************************************************************************* */ void assert_failed(uint8_t* file, uint32_t line) { /* 用户可以添加自己的代码报告源代码文件名和代码行号，比如将错误文件和行号打印到串口 printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ */ /* 这是一个死循环，断言失败时程序会在此处死机，以便于用户查错 */ while (1) { } } HAL 库不像之前的标准库，在系统启动函数 SystemInit 里面做了 RCC 初始化，HAL 库是没有做的，所以进入到 main 函数后，系统还在用内部高速时钟 HSI，对于 H7 来说，HSI 主频是 64MHz。 HAL_MspInit 和 HAL_MspDeInit 在 stm32h7xx_hal_msp.c 里面做具体实现。 PA0_C 这类的引脚只有在 TFBGA240+25 ballout 这种封装上面才有。 LSE Bypass 和 LSE On 之间的切换，必须要先关闭 LSE 才行。同样 HSE Bypass 和 HSE On 之间的切换，也必须先关闭 HSE 才行。 HAL_RCC_OscConfig 会更新全局变量 SystemCoreClock 的主频值，并且会再次调用函数 HAL_InitTick 更新系统滴答时钟。

hard fault 学习记录
type: item
date: 2019-06-25T17:04:00+08:00
description: 使用 segger 的 hard fault 的源文件后，当调试时，发生硬件错误的时候，可以查看 HardFaultRegs 中的内容，并对比 segger_HardFaultHandler.c 中的定义，就能得出具体是哪种错误了。

event recorder 学习手记
type: item
date: 2019-06-21T10:47:00+08:00
description: #define EventStopA(slot) EventRecord2 (0xEF20U+EventLevelError+((slot) & 0xFU), ((uint32_t) __FILE__), __LINE__) 从这个宏定义可以看出，MDK是通过分析EventRecord2函数的 ID 数值来识别是否是 EventStop 之类的功能的，如果是这些功能，那就把后面的数值转化为相应的文件和行号，并可以进行相应的定位。

gentoo 修改键盘映射
type: item
date: 2019-06-17T21:08:00+08:00
description: gentoo 上面修改键盘映射分为两种，一种是终端环境，一种是X环境。 终端环境 https://www.emacswiki.org/emacs/MovingTheCtrlKey https://wiki.gentoo.org/wiki/Keyboard_layout_switching 参考里面的终端部分，从 /usr/share/keymaps/i386/qwerty/ 这个文件夹里面复制 us.map，解压 gunzip .map 然后修改里面的 control 对应的码， 然后另存为 us_ptz.map，并进行压缩，gzip .map 然后放到 /usr/share/keymaps/i386/qwerty/ 这个文件夹下面。 然后修改 /etc/conf.d/keymaps 这个文件，选择修改好的文件， 然后重启keymap， rc-service keymaps restart 按键可以通过 showkey 来获得对应的键值。 X环境 https://wiki.gentoo.org/wiki/Keyboard_layout_switching https://www.charvolant.org/doug/xkb/html/index.html http://blog.csdn.net/kl28978113/article/details/47955275 使用 setxkbmap 来管理X环境键盘布局 /etc/X11/Sessions/Xsession 这个文件可以看出使用 setxkbmap来对于 键盘布局进行管理。 setxkbmap -print -verbose 10 查看当前的 keymap /usr/share/X11/xkb/keycodes/evdev 考虑了一下，最后直接修改 keycode里面的 evdev 文件，把里面的 caps和 RCTL替换，RTN和LCTL替换。

Upgrade to 17.1 from 17.0 problem:UnicodeEncodeError: 'ascii' codec can't encode character '\xc4' in position 50: ordinal not in range(128)
type: item
date: 2019-06-17T17:16:00+08:00
description: 最近 gentoo 从 17.0 更新到 17.1， 需要手动进行升级配置，使用 unsymlink-lib -p --finish 这一步的时候报错，报错如下： /usr/lib/python-exec/python3.6/unsymlink-lib -p --finish ... rm -d /usr/lib64/go/test/fixedbugs/issue5957.dir/c.go rm -d /usr/lib64/go/test/fixedbugs/issue5957.dir/b.go rm -d /usr/lib64/go/test/fixedbugs/issue5957.dir/a.go rm -d /usr/lib64/go/test/fixedbugs/bug437.dir/one.go rm -d /usr/lib64/go/test/fixedbugs/bug437.dir/x.go rm -d /usr/lib64/go/test/fixedbugs/bug437.dir/two.go Traceback (most recent call last): File "/usr/lib/python-exec/python3.6/unsymlink-lib", line 819, in <module> main() File "/usr/lib/python-exec/python3.6/unsymlink-lib", line 782, in main m.finish(pretend=args.pretend, resume=args.action.endswith('resume')) File "/usr/lib/python-exec/python3.6/unsymlink-lib", line 585, in finish out('rm -d {}', fp) File "/usr/lib/python-exec/python3.6/unsymlink-lib", line 41, in out _log(template, *args, **kwargs) File "/usr/lib/python-exec/python3.6/unsymlink-lib", line 30, in _log **kwargs UnicodeEncodeError: 'ascii' codec can't encode character '\xc4' in position 50: ordinal not in range(128) 我的 unsymlink-lib 的版本是 15，前面的一些 bug 已经修复了，所以检查 locale 的结果，结果发现是 locale 的问题, locale 都是 "POSIX"，通过修改 /etc/env.d/02locale, LANG="en_US.UTF-8" LC_COLLATE="C" 然后 env-update && source /etc/profile，就解决问题了。

tortoiseGit 的简单使用说明
type: item
date: 2019-06-12T15:39:00+08:00
description: tortoiseGit 是套在 git 外面的一层壳，能够图像化的进行操作 git 来实现相应的版本控制功能。 [...]

freefilesync
type: item
date: 2019-06-05T11:31:00+08:00
description: 最近有些资料需要在电脑和nas之间进行同步，考虑到这些资料很多不是文本字符，也不需要进行版本控制，所以考虑只需要文件夹同步工具即可。 通过搜索，最终选定了 freefilesync 这个软件，直接选择两个文件夹，然后先进行比较，比较可以选择比较时间和大小，或者只比较大小，比较完了以后，可以选择同步即可。