随笔分类 -  嵌入式

摘要:工作这么多年,一直认为char是有符号的,而事实上gcc和vs默认也是有符号,但是c规范里实际并没有指明char是有符号还是无符号,所以char比较特殊, char signed char unsigned char 是三种数据类型,与int等是不一样的,int就等效为signed int。 gcc 阅读全文
posted @ 2018-11-30 17:26 windtail 阅读(285) 评论(0) 推荐(0)
摘要:cmake_minimum_required(VERSION 2.8) if (${ARM}) set(CMAKE_SYSTEM_NAME Linux) set(CMAKE_SYSTEM_PROCESSOR arm) set(CMAKE_STAGING_PREFIX $ENV{HOME}/dev/k 阅读全文
posted @ 2018-11-30 17:21 windtail 阅读(318) 评论(1) 推荐(1)
摘要:编译Linux内核的最后是make modules_install install,这两个一般都需要root权限,即sudo,而一般我交叉编译内核时都是在.bashrc中export ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- 等等,而sudo默认会复位掉 阅读全文
posted @ 2018-04-04 17:36 windtail 阅读(543) 评论(0) 推荐(0)
摘要:Linux内核编译实在是费时间的事,搞内核移植的时候总要编译,生命有一部分就浪费在等内核编译完成上,有心想买个HP的工作站,看了下Z840的价格,想想还是算了。distcc早就听说过,一直没有去试试,今天终于试了试,真是大赞啊!!下面说下如何配置,为了方便叙述,先定义几个称呼 我直接工作的电脑称为L 阅读全文
posted @ 2018-04-04 13:35 windtail 阅读(3024) 评论(0) 推荐(0)
摘要:beagle bone black的u-boot编译时已经为SPI准备好了 MLO.byteswap,这个文件应该直接写入到SPI flash的偏移0位置,根据am335x的手册,SPI内可以保存多份引导,具体参见手册。 以上是TI官方给出的如何把MMC引导的u-boot写入到SPI的命令,这些命令 阅读全文
posted @ 2018-03-26 09:36 windtail 阅读(635) 评论(0) 推荐(0)
摘要:LD脚本(linker script)是什么 GNU ld是链接器,ld实际并不是GCC的一部分,ld属于binutils软件包。但是嵌入式开发时,下载的linaro GCC工具集中是包含 arm-linux-gnueabihf-ld 的。工作中我经常使用ARM的scatter文件,和这个LD脚本差 阅读全文
posted @ 2018-02-01 11:56 windtail 阅读(6015) 评论(0) 推荐(0)
摘要:下载了最新的JLink V622g,打开JLink命令行后,提示以下信息 然后换了V5.12.10就没有这个提示了,还是版本太高了的原因。没有试其他V6的版本。 阅读全文
posted @ 2018-01-30 09:30 windtail 阅读(1382) 评论(0) 推荐(0)
摘要:https://www.linuxquestions.org/questions/linux-newbie-8/man-pages-for-kernel-functions-758389/ 在Linux内核中执行以下两条命令即可 生的manpages在 /usr/local/man/man9中,不是 阅读全文
posted @ 2018-01-25 09:56 windtail 阅读(179) 评论(0) 推荐(0)
摘要:Xenomai 3在架构设计上确实优先Xenomai 2,至少对开发者来说,少维护了不少东西,看下面两张图就知道了 第一张图是Xenomai2的,第二张图是Xenomai3的,Xenomai3在内核中只有一个cobalt core,并没有POSIX/native/VxWorks等等的封装,内核的代码 阅读全文
posted @ 2018-01-24 10:44 windtail 阅读(932) 评论(0) 推荐(0)
摘要:u-boot这个东西从自我N年前使用到现在,变化好多,今天开始重新研究下,本系列的研究都是基于BeagleBoneBlack(bbb)开发板和 u-boot v201801版本的。 SPL介绍 在源代码中 doc/README.SPL 中说得比较明白,我这里再归纳下。 现在很多处理器都内置一个BOO 阅读全文
posted @ 2018-01-22 17:01 windtail 阅读(5809) 评论(0) 推荐(1)
摘要:这两天总在纠结编译一个PC机上的Xenomai开发环境,选择编译器、kernel版本和IPIP版本,但是今天忽然想到,上位机只是个开发环境,只要能编译、能运行就可以了,实时性根本不是关注的东西。而Xenomai 3刚好可以直接在PREEPT_RT上运行,Debian自带的内核源代码里就有PREEPT 阅读全文
posted @ 2018-01-22 11:48 windtail 阅读(957) 评论(0) 推荐(0)
摘要:有的时候,我不是第一次遇到这种时候,编译内核时报出编译器BUG。如果是ubuntu还好一点,默认软件仓库中就有好几个GCC,换一换总能找到一个好使的,实在不行还有个Tooltrain的ppa,但Debian却没什么选择,可能可以去testing里或unstable里找找,不过这些都不够灵活,让我们直 阅读全文
posted @ 2018-01-19 15:41 windtail 阅读(13850) 评论(1) 推荐(0)
摘要:rtems 4.11 arm beagle 启动流程简述 阅读全文
posted @ 2016-07-29 18:24 windtail 阅读(1036) 评论(1) 推荐(0)
摘要:4年前,曾经把rtems4.10移植到atmel 9263上,要不是当时移植的git仓库还在的话,真是不相信自己居然还干过这事。所以这次再捡起的时候,要记录一下。还是从编译器开始。 首先打开 http://docs.rtems.org/rsb/ 这里说了很多为什么要从源代码编译的好处。大概就是说我们 阅读全文
posted @ 2016-07-21 22:23 windtail 阅读(867) 评论(0) 推荐(0)
摘要:STM32 I2C 搞了几天了,比较郁闷,写点东西给那些正在郁闷的同志// 好使的,也是范例的代码cnt = TIME_OUT;while (cnt-- && !I2C_ChechEvent(I2C2, XXX));if (!cnt) goto err;// 不好使,总是超时cnt = TIME_OUT;while (!I2C_ChechEvent(I2C2, XXX)) { cnt--; if (cnt == 0) goto err;}// 死在这了,动不了while (!I2C_ChechEvent(I2C2, XXX));另一个问题,如果只初始化I2C2,我的I2C外设芯 阅读全文
posted @ 2013-06-19 22:45 windtail 阅读(514) 评论(0) 推荐(0)
摘要:在STM32F215上移植Keil的RTX操作系统,随便设置下就能好使,但是当我想知道systick到底是怎么设置的时候,就得翻翻代码了,原来在 rt_HAL_CM.h中以一个内联函数的形式定义的1 __inline void rt_systick_init (void) {2 NVIC_ST_RELOAD = os_trv;3 NVIC_ST_CURRENT = 0;4 NVIC_ST_CTRL = 0x0007;5 NVIC_SYS_PRI3 |= 0xFF000000;6 }注意:CLKSOURCE位被写死为内核时钟(FCLK),比较鄙视这种写死的方法,如果要改... 阅读全文
posted @ 2013-06-16 16:02 windtail 阅读(2832) 评论(0) 推荐(0)
摘要:有些时候,我们只想定义函数,却不想手动调用函数,而是希望这些函数在系统上电时自动调用。比如在写设备驱动时,设备的初始化函数就是这样一种函数,我们希望所有设备在上电的时候被初始化,每次增加一个设备时,不需要想着去调用这个函数,定义完之后,自己就被加入到设备初始化函数集中。解决的方案有很多,比如写个预处理脚本,把特定格式声明的函数扫描上来,生成一个数组,然后统一调用,不过,这里有另一种解决方法:为每一个函数定义一个指针变量,然后将这个指针变量放到特定的section中,链接器最终会把同名的section组合到一起,即自动生成一个函数指针数组,访问链接器生成的符号即可。typedef void(*D 阅读全文
posted @ 2013-04-26 21:52 windtail 阅读(1144) 评论(0) 推荐(0)
摘要:Keil MDK 4.23 支持Eclipse啦!早就应该这样了,Keil的编辑功能实在是太差了,而且和各版本控制器集成也不好。Eclipse很好很强大!配置方法参见:http://www.ourdev.cn/bbs/bbs_content_all.jsp?bbs_sn=5297682安装的注意事项是采用 file:/// 协议而不要直接用文件夹路径即可! 阅读全文
posted @ 2012-02-26 21:56 windtail 阅读(1674) 评论(0) 推荐(0)
摘要:为了让文件支持Unix标准的open, read, write, ioctl操作, RTEMS做了一层libio的封装,封装之后,用户不必了解libio过多,只要会用就行了,我没有仔细地看代码,就是看了看console.c 和 相关的termio函数,然后做了几个实验得出,若要使文件支持标准C的操作,只需要操作rtmes驱动函数中的最后一个参数,即 void *arg,简述如下:open、close函数: 将arg强制转换为 rtems_libio_open_close_args_t *,通过 mode和flag可获得打开时的标志,只读、只写、读写等read、write函数: 将arg强制转换 阅读全文
posted @ 2011-06-11 21:35 windtail 阅读(1074) 评论(0) 推荐(0)
摘要:今天调试出了特别奇怪的问题,经常用的串口发送居然都不好使了,代码大约是这样的:if( flag in memory mapped reg) { write char to transmit reg}从串口发出去的东西总是不对,用jtag调试发现,单步的时候是正确的,但是只要全速运行就出错。思考之后,感觉只可能是flag读回来是不对的,但怎么可能呢??仔细思考后,发现一个问题,ARM如何知道每次都要通过读这个地址来获得flag呢?虽然已经将memory-mapped reg 的地址定义为 volatile,但是这只是告诉gcc不优化进寄存器,但是ARM还可以从Cache中读啊,ARM没有专用的I 阅读全文
posted @ 2011-06-10 23:03 windtail 阅读(1718) 评论(0) 推荐(0)