djyos 发表于 2010-1-11 15:07:51

如何配置djyos——以djyos大学计划免费的stm32板为例

stm32和lm3s版本,因为外设和时钟部分不同,因此本贴与在“其他cortex-m3”版块上发的帖子,虽大部相同,但也有不少不同之处,若版主觉得有重复发帖之嫌,就删了吧。

嵌入式产品,几乎每一款都是独特的,而且许多情况下资源还是很紧张的,设计者希望高效利用有限的资源,这样,操作系统的配置就非常重要,合理的配置,能够使操作系统既能满足应用需求,又降低flash和内存消耗。按默认配置的版本,资源开销如下:
    Total ROSize (Code + RO Data)                24096 (23.53kB)
    Total RWSize (RW Data + ZI Data)             10576 (10.33kB)
    Total ROM Size (Code + RO Data + RW Data)      24560 (23.98kB)
上述数据未包含流水灯事件、shell事件、uart守护事件和键盘守护事件所需要的运行栈。

1、djyos的目录结构
\djyos\si-------------------------------------------------------------总目录
\djyos\si\djyos-----------------------------------------------------所有不需要移植的内核代码
\djyos\si\arch------------------------------------------------------所有需要移植的内核代码
\djyos\si\arch\cortex-m3----------------------------------------cortex-m3的公共代码
\djyos\si\arch\cortex-m3\st-------------------------------------st公司的m3的公共代码
\djyos\si\arch\cortex-m3\st\DIYstm32-----------------------DIYstm32板子的代码
\djyos\si\prj-DIYstm32-------------------------------------------应用程序工程目录
\djyos\si\prj-DIYstm32\include\config-prj.h--------------------就它了,操作系统的裁剪就是由这个文件控制的。
\djyos\si\prj-DIYstm32\*.scat----------------------------------keil版本的链接配置文件,修改它可以改变异常和中断的栈尺寸。

2、配制方法
把配置放在工程目录中,有一个好处,就是不同的工程,对操作系统的组件有不同的要求,只要改自己目录下的config-prj.h文件就可以了,操作系统代码可以保持不变。

djyos的配置是通过定义各种常量来实现的,下面分组说明这些常量的含义。

2.1配置主频
同一个板子,应用于不同工程时,主频可能不同,在这里配置。
#define cn_mclk         (72*M)      //主频
#define cn_fclk         cn_mclk   //cm3自由运行外设时钟
#define cn_ahbclk       cn_mclk   //总线时钟
#define cn_pclk2      cn_mclk   //高速外设时钟
#define cn_pclk1      (cn_mclk/2) //低速外设时钟
#define cn_extclk       8000000   //外部时钟=8M

#define cn_tick_ms      1       //操作系统内核时钟脉冲长度,以毫秒为单位。
#define cn_tick_hz      1000    //内核时钟频率,单位为hz。
#define cn_fine_us      1       //操作系统内核精密时钟脉冲长度,以微秒为单位。
                              //它表示从上一次tick脉冲开始至今流逝的时间量。
#define cn_fine_hz      1000000 //内核精密时钟频率,是cn_fine_us的倒数。

2.2配置内核组件
djyos中事件控制块、锁控制块等所需要的内存是静态分配的,合理配置下列常数,能够很好地控制内存消耗。
#define cn_device_limit   20   //定义设备数量。
#define cn_handle_limit   20   //定义设备句柄数量。
#define cn_locks_limit      20   //定义程序中可用的自由锁的数量。自由锁指用户
                //调用semp_creat和mutex_create创建的锁,不包括嵌入到设备中的锁。
#define cn_events_limit   32   //事件数量
#define cn_evtts_limit      16   //总事件类型数
#define cn_wdt_limit      5      //允许养狗数量
#define cn_mem_pools      10   //允许建立10个内存池
#define cn_int_num          60   //stm32有60个中断源
这些常数的含义及对内存开销的影响如下:
可创建设备数量:20,设备控制块开销1200字节。
可同时打开设备数量:20,设备句柄开销400字节
可使用的锁的数量:20,包含信号量和互斥量,锁控制块开销800字节。
事件数量:20,即事件队列中未处理完毕的事件数量上限,开销1680字节
事件类型数量:16,即应用程序登记的事件类型上限,开销1152字节
看门狗数量:5,即允许应用程序创建的看门狗数量上限,开销380字节
内存池数量:10,除从堆中分配外,djyos还提供类似ucosii的“批发-零售”式内存分配功能,内存池控制块开销800字节。
中断数量:60,中断控制块开销1680字节。注意,这里指的是stm32版本能够支持的最大中断号,不是应用程序实际使用的中断数量。
用户可以根据自己工程的特点,灵活配置这些常量,控制资源消耗。例如,应用程序不需要那么多设备,就可以减少设备数量。

2.3配置外部组件和外设驱动
各常量中,1表示需要该组件,0表示不需要该组件。
#define cfg_keypad          1   //是否包含键盘驱动
#define cfg_djyfs         0   //是否包含文件系统
#define cfg_djyfs_flash   0   //是否包含flash文件系统的驱动
#define cfg_djyfs_ram       0   //是否包含ram文件系统
#define cfg_nude_terminal   0   //nude terminal是一个在启动时提供最基本的人机
#define cfg_uart1_used      0   //简易串口
#define cfg_uart2_used      0   //485口,重映射到PD5/PD6
#define cfg_uart3_used      0   //未引出
#define cfg_uart4_used      1   //RS232口,用于shell
#define cfg_uart5_used      0        //未引出,此串口不支持dma

除上述所列的配置项目外,还有一些其他项目,但这些项目不建议用户修改,除非有特殊需要。

3、配置栈
djyos for cortex-m3中,应用程序使用psp栈指针,异常和中断使用msp栈指针。异常和中断栈的尺寸配置为1K,如果应用程序的ISR没有用到这么多的栈,也可以通过修改链接配置文件(arm的术语叫分散加载文件),以节省内存。
    heap_top 0x2000c000-0x400 EMPTY 0
    handle_msp +0 EMPTY 0x400
这句中,0x2000c000是stm32f103vc内存最高地址+1,0x400是异常和中断的栈尺寸,改动这个参数即可。

tuy0326 发表于 2010-1-13 16:12:09

有机会一定试试djy

jeffwei 发表于 2010-2-3 13:39:09

没学过OS,想学学,现在找了个small_rtos1.10.5在看,也买了本操作系统原理,华中科大出版的,觉得写得有点乱,没啥头绪,以UNIX为例的
另外看了网友建议,买了一本数据结构原理
春节过后看看能不能做一个djyos的板子,通过djyos来学习OS使用
一直觉得楼主是技术牛人,不知道有何入门建议呢,买哪些书看看?

djyos 发表于 2010-2-3 14:30:54

邵贝贝翻译的那本ucosii的书不错,学操作系统用它。
如果想研究djyos的话,建议下载我的书,两本书结合着看,很好的。

jeffwei 发表于 2010-2-3 19:04:53

谢谢回复,下载你的书了

726bf 发表于 2010-5-26 20:17:05

手上正有STM32的开发板,可惜不会用,只会用8位单片机,过来mark一下,备用./emotion/em025.gif
页: [1]
查看完整版本: 如何配置djyos——以djyos大学计划免费的stm32板为例