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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构7 P0 x3 m7 Y2 ]; W0 `
4 S1 w" T& U+ O$ _; X/ v0 c3 R
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2564 M$ H5 p2 X2 N( L, F
2 t6 A$ e6 c0 {. m8 W# J; J$ e7 c: m
其他程序段。。。。。0 O/ {) l0 O2 P& H: y0 {

# p, K* b( s1 R8 _4 Q$ t3 z   free(x_d);% p! o6 h7 R; L! g1 n! f

$ d5 i1 J4 S# Q$ K使用DSP侧单独调试功能,验证动态申请没有问题,
. L3 G$ ]' Q" o, i
. a; O- I/ X& u# B& A, U但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
0 l+ p4 [" B& ?2 v: |4 c' J
5 p, c2 {! ?/ A) E; b- j
# A/ ]5 c5 q' y0 B- m3 @( v* i, ^
! f) c4 w6 ^8 g* d3 l& h8 e: k: ?
( A) ]' v4 v, A( m7 {1 c6 x2 @. z1 e
5 ?5 B% A6 Y5 ?3 }" G3 m+ h/ x2 c

6 y% p1 s  a, h6 p7 q" B3 A
7 b% t; i5 v: g8 m' D* _9 i) P0 m, D, A1 v
( f. r. r$ A: t# ]. h

) V4 p" }% }4 e% @- H( R3 Z- x9 ^. N3 ^3 M
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
+ B9 t' h0 u. n我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下. T4 o/ C" `) }1 j5 J# F+ @
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
5 Q( k0 |8 W- W, Z5 L5 a3 C2 i

, |. z$ C5 i3 i6 S( O是不是需要在DSP.CFG中进行配置
. U  i; F: t& D0 P! X. P我现在的配置为( B) ]1 K. h4 P- ]$ R; Q
! |. x0 G& s1 S# G6 k
/*. n+ o0 W! Z- r( J7 a
*  ======== Operating System Configuration ========6 M$ K+ f6 Z/ ]5 y( B; }
*/
, o) o0 w6 r2 H# S
& H( O; e" T7 R: x/* no rts heap */. S/ x2 H& r* N& R4 L
Program.heap = 0;1 K, ?4 v1 [4 N/ Q2 ~
Program.argSize = 100;  /* minimum size */* |9 {+ M' ?. x6 c
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
3 z; a$ P7 Y( Y+ X9 L/ t7 ]0 z8 U  n: z* [$ T! v( `7 G+ R% [
/* create a default heap */
/ W( ]4 P; _' B% n2 {- \' o3 mvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');6 b2 @/ j& D' P* a
var heapMemParams = new HeapMem.Params();$ T& Q5 y7 g) n
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
0 @) U- e+ ~+ Q5 F/ r% \) V' A' p+ @) B! ]. t' r' g& Y1 U) H
var Memory = xdc.useModule('xdc.runtime.Memory');6 N6 x5 t" `, E- X1 O0 a$ @
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
& k, ]2 q  C7 y6 u/ ^6 d4 f% v
5 U8 l, o  y4 ], ?: m9 A1 _/* configure System module */
& F& }! F6 i* L& J& `9 Avar SysMin = xdc.useModule('xdc.runtime.SysMin');$ v2 W  Q7 @- l+ L' g7 a
SysMin.bufSize = 0x1000;
7 m4 }( [  A" z0 |8 V; q4 U3 JSysMin.flushAtExit = false;
* {5 p/ N/ W3 B: E% h0 T" Z" B9 t
var System = xdc.useModule('xdc.runtime.System');
9 F) I" y" F& [0 @! |System.SupportProxy = SysMin;
) H; s4 g6 O+ }  G  [3 r
6 j% s- b1 B! Z) z) {/* configure SysBios to use the lower half of Timer 1 */
. s7 e. s2 L7 W, }var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');/ G! q$ k- p9 V2 I* [2 h4 c
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
1 u/ {/ h0 o5 e1 WTimer.timerSettings[1].master = true;" o1 d6 V: x  r) x1 p
Timer.defaultHalf = Timer.Half_LOWER;
* e/ B$ E  D5 p9 i# z. GClock.timerId = 1;; s) n5 T4 }+ Z" ^; b* \9 |

: i; R$ W' e# ?8 ]& y4 m# d. W, X: w8 P9 K6 r4 }( A; X
/*4 x. F$ J) H2 W1 a7 R
*  ======== Miscellaneous Configuration ========, }3 @" Q& ~. r+ f1 K7 k0 {
*/
2 W* i( ^* |0 i1 i  @  g  B
0 V: N/ X# t2 p% ?1 l' ]/* set default diags mask */$ h! p$ b% c. s6 T4 C2 H! J9 g& a
var Diags = xdc.useModule('xdc.runtime.Diags');3 _0 E( C3 v& @( O4 H
var Defaults = xdc.useModule('xdc.runtime.Defaults');; z$ X0 g: e% A# A& n

' ~& }: ~8 _# w: i& t- N3 l9 KDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
) B, c. P4 V: p) p$ a5 f9 CDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;4 j( W% ]- f3 ^
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;; v9 C1 R2 V9 ~; f& K) h/ V
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
+ ]  B7 U* {" k( u; mDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
; r2 s( a8 E! B& S6 O% RDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;$ s. ~+ W* V) @/ ^+ b; O
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;+ P+ z  P2 V" m4 R; Z6 N
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;0 M$ x' ~$ ~, L! H( U
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
8 g3 a: e/ \: ?, T% |1 h: v3 YDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;! d9 [9 G/ Y& i& G) q( c
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
, P! g5 I  [- ~7 g6 gDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
" @2 W$ f; o* Z- B8 ~Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;7 d9 w5 K, w7 R  h
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;2 B, p: J: \/ }

( D6 r6 v8 x: M7 d2 [/* override diags mask for selected modules *// {5 s# t, W1 Q( a, \8 V! O3 V
xdc.useModule('xdc.runtime.Main');2 M/ s( h7 R% E( s
Diags.setMaskMeta(
8 \0 |% w: k* I( @    "xdc.runtime.Main",
4 u- c  c' L% _. y    Diags.ENTRY | Diags.EXIT | Diags.INFO,! F7 i- x5 M- g4 a, G1 |
    Diags.RUNTIME_ON
  q; Z: \2 |* V! F. }1 H) W);
2 Q; z9 f. i0 V- ]& H5 Q' d  M( b
$ e  K8 s! X: B8 e, y4 ?var Registry = xdc.useModule('xdc.runtime.Registry');
. g! y+ X1 U  W$ z, nRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;: x# L+ R+ e4 C1 U  P  j( I/ H, k
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;0 ^. C4 w$ @9 H; b, `3 y; P2 b( m
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
# W8 T0 E1 q1 |0 |; Q! {& ?Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
' j( ?) j! g. y. t0 o; H
6 |: A( h. R8 G/ ^/ y; C/* create a logger instance */
5 o- n4 i( Q, M1 z; d* c% [  Mvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');/ j2 z* U1 j9 j2 ^
var loggerBufP = new LoggerBuf.Params();( o1 O) v8 ]1 B, S7 d" |) }
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
  ]# m1 ]1 [) @' `5 D2 e  RloggerBufP.bufType = LoggerBuf.BufType_FIXED;
- Z0 F8 d& j6 [4 i. _" _7 X: K
5 n/ {; f& k; M) k* b  P, Tvar appLogger = LoggerBuf.create(loggerBufP);
4 I0 y- t! X; ZappLogger.instance.name = "AppLog_Core1";' }9 n# y/ c: _* \
Defaults.common$.logger = appLogger;+ f# T, L$ m( r" \/ w2 K6 Y
Memory.defaultHeapSize = 0x8192;   
! c* x" q# `$ F- p. Y! _: ~Idle.idleFxns[0] = "&LEDStatus";3 Y9 `) `6 n; G1 p/ }
Cache.initSize.l2Size = Cache.L2Size_32K;. J) `3 Q0 x- W! k
+ f4 I* K* b, @# d* u
回复 支持 反对

使用道具 举报

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 */0 g- J( V/ i2 u- i9 T
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
3 u. d( G+ ^1 [( t9 kvar heapMemParams = new HeapMem.Params();$ w7 T! z( s  P- y
heapMemParams.size = 0x4000;
2 U/ m" S5 {- k4 F6 y
7 E7 Z) V7 v# V0 P8 [6 y0 z0 mvar Memory = xdc.useModule('xdc.runtime.Memory');
2 R7 \5 m! v7 E: O' \9 q5 q  SMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
0 q5 i$ Z* J; b! `! T. O: \4 q! X2 o/ E$ X% Z( I
我大约calloc  每次共计大小为5K*16bits,: c# ^$ }5 P$ M$ e
而默认配置才0x4000、需要改大。8 L& B9 {# ^' M! K- k
9 k4 n2 o8 @3 g0 P9 }
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */7 S0 [8 Q$ F* ]
Program.heap = 0;- j; O, ^! o0 R. D( O* F! g9 M" f
Program.argSize = 100;  /* minimum size */* i5 c8 S* \% o+ p
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-23 04:16 , Processed in 0.045100 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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