社区应用 最新帖子 精华区 社区服务 会员列表 统计排行 银行
主题 : 如何配置djyos——以大学计划免费的stm32板为例
djyos 离线
级别: 管理员
显示用户信息 
楼主  发表于: 01-11   

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

嵌入式产品,几乎每一款都是独特的,而且许多情况下资源还是很紧张的,设计者希望高效利用有限的资源,这样,操作系统的配置就非常重要,合理的配置,能够使操作系统既能满足应用需求,又降低flash和内存消耗。按默认配置的版本,资源开销如下:
    Total RO  Size (Code + RO Data)                24096 (  23.53kB)
    Total RW  Size (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是异常和中断的栈尺寸,改动这个参数即可。


bboom 离线
级别: 论坛版主
显示用户信息 
沙发  发表于: 01-11   
好文啊,模块化的djyos,很好很强大
bitant 离线
级别: 新手上路
显示用户信息 
板凳  发表于: 05-15   
好东西, 我觉得可以尝试下。
快速回复 顶端
内容
HTML 代码不可用
 使用签名
 Wind Code自动转换
 匿名帖
 隐藏此帖
 隐藏附件
 出售
 加密
限 100 字节
验证问题:都江堰操作系统英文名称 正确答案:djyos
如果您在写长篇帖子又不马上发表,建议存为草稿
限 50000 字节
按 Ctrl+Enter 直接提交