关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站
点击跳转“创龙科技服务通”

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 8089|回复: 5
打印 上一主题 下一主题

关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构% N$ k4 o, b% A/ s* N! Y
% o* }- A$ ]! p# G- k5 s
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
3 J* e' V, L& g+ y% d
2 `/ g/ d7 H3 J其他程序段。。。。。
. U/ l3 v, t0 } # J3 O  {9 ]- z- S: S9 l
   free(x_d);7 |  _' L2 N( ?5 j- _3 Y
4 c" R# q( @; W0 U* C) |+ K) u
使用DSP侧单独调试功能,验证动态申请没有问题,% |# {, c8 D' |* C, \2 H

! ?) v2 C: ?: d1 u3 J但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。4 B3 h2 L; _, |: H# k& e

; k2 p% u# P) C+ x; n4 z
" f6 |; O, q# y
) k6 U7 o5 H2 G. A/ l, s9 R* q1 I# A- y+ L2 n# D
) M4 P$ e3 E% E$ G% x- `! @' }# y
6 Q2 n1 i. k: O- u. y% ?2 U  y

. \( f  k5 l  l; ]: O& m
; t: y& h' t1 N, l) k4 q- Y% M
% E( c, ]0 G2 L$ E" A+ d1 h$ c% a6 O2 m% v& j) y6 W( E' l
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
* Q# W6 M6 o0 u+ M6 E% M我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
2 Q/ j  [1 g* c2 ~3 I5 P(不过疑惑的是,为何单独DSP仿真就没有问题呢?)/ n# q( d6 q( e" J3 [
3 k, ~# M! q# S+ y7 M0 `
是不是需要在DSP.CFG中进行配置
1 A) |. K; B9 u+ E) N我现在的配置为
" y9 l9 R( |6 H8 U6 J6 u2 M# a( I# V' Y1 [2 v# |) @# o
/*" m( z3 [% \5 O5 V; L# |
*  ======== Operating System Configuration ========- p0 k) q, ^1 v& l- m" z1 o
*/6 x" j$ \( T/ y, b
: t' s# S7 a! ?2 k( y) p. B
/* no rts heap */8 j( a0 A+ K( W; r6 G3 T( H
Program.heap = 0;* ^$ e# ]6 o9 W( i$ I$ H% D7 v: ~
Program.argSize = 100;  /* minimum size */
8 y  j: t2 X7 I) w8 XProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大& V1 N0 N# M7 x) ?& n
; y, {: n7 f5 W/ L
/* create a default heap */
5 W' p' y: ~6 P' h9 ivar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');4 K# D, [0 T: G6 \7 T# m- Y& d8 l4 V% P
var heapMemParams = new HeapMem.Params();
- q* r9 W  T3 N1 n* AheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
& _4 t! j! H9 k: b! E, W
8 @! G/ h5 K# K; H: u) }
var Memory = xdc.useModule('xdc.runtime.Memory');
9 r6 B) A, |0 QMemory.defaultHeapInstance = HeapMem.create(heapMemParams);. K; X8 g+ A9 ~+ }+ P  \: ^
, A4 Z: h9 H0 n+ t7 [* k# l3 ?
/* configure System module */
5 c: F! v6 ^# _! b3 M3 ?var SysMin = xdc.useModule('xdc.runtime.SysMin');
$ v; [7 R" J' D9 h# M5 g  ASysMin.bufSize = 0x1000;/ U' W+ D* M6 ?/ ^: T
SysMin.flushAtExit = false;) L& s( k/ G! F; J# k+ I0 r
, w( S# V, n- A% l1 P
var System = xdc.useModule('xdc.runtime.System');
1 F, Z3 T; O( }' hSystem.SupportProxy = SysMin;2 i! b, I) A- d% ~
  V: q; d6 R6 I0 s1 V7 a1 _% q' j
/* configure SysBios to use the lower half of Timer 1 */
, ]# K" p, D' `2 v% L7 k# fvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
0 L+ t* l8 R9 gvar Clock = xdc.useModule('ti.sysbios.knl.Clock');% L" T, p/ E4 E7 _: s  p$ d& M
Timer.timerSettings[1].master = true;, T( P" ?0 s$ P& y1 G! B
Timer.defaultHalf = Timer.Half_LOWER;; U4 T4 L) E$ G: x
Clock.timerId = 1;- v9 v7 ]5 o* C3 w+ t

: ]; Y- n9 F" U. L1 L6 Q3 a1 ~" y& U7 D# F% {# e) Y
/*
1 X6 r( t6 W! i6 C4 _  A *  ======== Miscellaneous Configuration ========
$ R* h! h) a! u6 r5 Y */7 W8 G7 H/ y- n- d$ F8 m1 ?. \

5 F4 |2 @7 @& z3 g: C+ J3 p$ d4 _/* set default diags mask */
8 {' S9 j% [, u2 ]var Diags = xdc.useModule('xdc.runtime.Diags');
: B6 V) ?. ^/ K, g8 k) u/ F/ {var Defaults = xdc.useModule('xdc.runtime.Defaults');6 p) J0 K5 Q" P# R
- [3 p7 T8 Y. _; h9 v! a
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
8 S3 ^: T- P6 D7 l' N! f  V/ gDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;( i' Y9 `3 Q" R3 p& ~/ X
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;5 [# `) _. d" S5 g
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */; W% `' F* l9 e/ n+ }+ Z
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */6 }. W3 D1 T0 O4 n( _) B
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
4 B$ T+ e) P# u1 C2 R. bDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
& ^1 j, m+ y* w. SDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
2 h. n9 I, T( C8 bDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
( K% ~1 F" D# C3 C: LDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
: x  k9 e. b4 Q  w" F/ e$ y: Q% A- hDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;$ M: X) I" H( M! ~) I
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;* A4 L6 ?3 P6 y* b
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;" U* T: P! l2 q# Y! X$ F
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;/ [: W' r' F, z; @. j4 k0 P" S
  X5 `4 m, J  n7 W* D8 }" z( Y/ J
/* override diags mask for selected modules */- ?' s0 A5 @. K& e' v+ f
xdc.useModule('xdc.runtime.Main');
5 F2 F, e, |7 ]/ WDiags.setMaskMeta(
& U+ N, [7 K2 _4 J    "xdc.runtime.Main",
8 I  ^3 P" m) R! C    Diags.ENTRY | Diags.EXIT | Diags.INFO,
2 D) u( I9 ^( j9 g7 O0 ~0 D    Diags.RUNTIME_ON/ G  k1 H9 z3 p( P% w! p. K
);9 i4 g' |( t' W" N" ?
- R  ^+ T/ r9 ?# D, \' p/ c/ ^7 x
var Registry = xdc.useModule('xdc.runtime.Registry');
# Q# E) B; |/ A; b! U; H  |1 pRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;9 ~+ N9 H* e6 T% }& d7 h
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;; p* q: K5 I# x$ l' x& h, z' W) F
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;- V% g5 L8 d' P' _& y) o  Y- G
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;7 D! R' U) V6 e) t8 m- `- U& D* G

( M" e1 V4 _; o8 M$ Q9 E4 ^! Z/* create a logger instance */
, @1 K4 t8 n# f" A; lvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
; e% i* H7 U. q/ Y  E9 avar loggerBufP = new LoggerBuf.Params();
) \; W! g" C; n" sloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
: g! b, p! `) ^! G, P5 `, W* z3 ZloggerBufP.bufType = LoggerBuf.BufType_FIXED;
. H/ G9 N. y2 r) A$ R$ I5 j% G- h* }5 V' i. N- ~
var appLogger = LoggerBuf.create(loggerBufP);% K, ~; V1 y' ]; [
appLogger.instance.name = "AppLog_Core1";
9 y5 X) ~' _$ y1 ^* `* o4 ^Defaults.common$.logger = appLogger;& @& P, Q2 t- y8 R# V" {
Memory.defaultHeapSize = 0x8192;   
% c8 G0 U* M6 r  y2 b- Z1 tIdle.idleFxns[0] = "&LEDStatus";
" ~8 L# d, d$ S. z$ hCache.initSize.l2Size = Cache.L2Size_32K;
( p0 T# u, g, W, F' R
: J: J& M# E& w, i& r& m" c$ F6 ^
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
板凳
 楼主| 发表于 2015-9-7 15:38:00 | 只看该作者
为什么没人回答呢?   大家都不用动态申请内存方式吗?
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */- O+ b! ^6 ]) X! `/ p
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');3 e# c; v, U  y" v7 p) \
var heapMemParams = new HeapMem.Params();, k7 x6 |1 m/ [( h% A9 S
heapMemParams.size = 0x4000;' p+ j. L* P0 Z& c

; V3 N8 @7 c% O1 F8 xvar Memory = xdc.useModule('xdc.runtime.Memory');
* h7 u$ `% C9 h2 T" v: \Memory.defaultHeapInstance = HeapMem.create(heapMemParams);( u. k# {" r6 E* R- F0 W. ^7 Y" M
& U7 F5 t8 t; Z4 {# j
我大约calloc  每次共计大小为5K*16bits,
+ d8 Y" s/ M  U- J而默认配置才0x4000、需要改大。6 [  k8 }  J3 e. {. G( E+ @, P
3 _. n& M' w- V: @& K+ b
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */5 X2 Z5 ?+ f+ M1 I, c* i# M
Program.heap = 0;
) S' G  i8 w$ k4 YProgram.argSize = 100;  /* minimum size */, `% [% n! j8 _
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
6#
发表于 2015-10-31 20:55:50 来自手机 | 只看该作者
这个问题,我再测试一下,过两天实测后给你答复!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

点击跳转“创龙科技服务通”

QQ|手机版|小黑屋|嵌入式开发者社区 ( 粤ICP备15055271号

GMT+8, 2026-3-24 02:09 , Processed in 0.044077 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

快速回复 返回顶部 返回列表