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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
: ?, b1 B8 T3 ]& R% I
# [# F7 L3 }' b% {    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256# s' n: H4 ]; e6 K! |# d, h3 _

* w2 `  W: p! q  o其他程序段。。。。。
! \* [3 F- k% r+ s8 [  ]% ^
- Q/ [  V: u0 i6 \% k  }9 o) x   free(x_d);  E1 ?% {! s! l+ s" U0 W
- P$ p+ O# w3 Z, x% Y9 `4 Q0 l
使用DSP侧单独调试功能,验证动态申请没有问题,
' C2 [! a3 S, x' G6 v. Y
4 E: q) ]$ z# ^+ {8 |! S但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
. U8 q4 z# e4 H4 o7 E' v
' J/ B% G, i5 y9 |2 S3 x

0 Y1 A% r9 V; O, Y# b, k! F. @' c8 t
+ S; \5 U+ M' q$ r/ d

2 b9 z7 `2 w3 _) b$ Q
( y: I1 A! V9 g$ }% E: d+ J
9 @- H4 C& b: i$ }9 [5 J% }8 O
- H& ?: c9 s2 B' n! X
' l5 J% G& B2 q9 f  j; U" _9 O) y  L3 V6 q! E, u$ @- k
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明, s( y8 a5 ?" M, [4 x
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下  K* a, [: Q, W
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)2 m, `8 E4 A7 y( y  c8 t% P& F
9 e& u  n( g1 n" q" v
是不是需要在DSP.CFG中进行配置( B, a! X2 I# b" s! x3 n+ _: |. K
我现在的配置为; Y, ~; X- f9 G  ^0 H9 z
; l* t1 i: F' k; Y2 E3 i# _( ~$ }
/*' ?- m: e/ ^+ ^6 L0 y' t5 X
*  ======== Operating System Configuration ========
5 t8 h4 N+ C1 m4 |; j */
; S+ y' S3 S6 B' a- J4 k) ?# t# J) w- f& G2 l1 N
/* no rts heap */( ]" N! x' R* l9 }, Z
Program.heap = 0;9 |) z- b) S6 q/ _
Program.argSize = 100;  /* minimum size */) C& e$ H! v: ?  J
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
1 ^8 p1 F; _# {* {* z) i0 F$ A; W! i
/* create a default heap */3 Z4 t# j  @, _+ J; z( `
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');$ \; Y! a; a. T4 {9 c
var heapMemParams = new HeapMem.Params();! q* f; ]' z8 s$ N0 }7 @9 v! _
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
( F* t5 n. N3 a9 m) O* ?' c8 d
" [8 r3 ~3 i+ \8 c
var Memory = xdc.useModule('xdc.runtime.Memory');. U* _# C3 o) O! v# j
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);  E6 {4 C/ L& H! G7 K5 c

; ]" G" K! d, r7 ?- ?/* configure System module */9 D" u7 }- s4 ~% C+ i6 c
var SysMin = xdc.useModule('xdc.runtime.SysMin');2 J" T& O) {8 x" g( M8 u
SysMin.bufSize = 0x1000;
3 O; p  C8 s: ?. B. }$ z& QSysMin.flushAtExit = false;
- [- y3 t0 H2 |) Q# k
/ [* }9 O+ _3 y7 _; E: }5 y- F$ j; Mvar System = xdc.useModule('xdc.runtime.System');: _. z8 F2 O. o9 b$ s! f- j
System.SupportProxy = SysMin;! g4 P: J9 D8 ?  j# \
: p9 b* A& K& q9 M
/* configure SysBios to use the lower half of Timer 1 */
# D& w  }4 p5 L2 X* P+ s- Svar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');* s7 x/ |& f2 G, M' B# h
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
, l. w  ?, O" _; _) w0 B3 aTimer.timerSettings[1].master = true;
8 K0 J, x( @7 C7 N0 Y7 TTimer.defaultHalf = Timer.Half_LOWER;' r* H# B5 c+ \$ b: [/ D
Clock.timerId = 1;$ ?# E) m2 G# O1 V: Z1 [
' }/ n/ w/ S" [: v3 J' m
# y8 f9 _2 q+ Q4 |) ?
/*6 |) F1 D' [, T: x2 r( D, @
*  ======== Miscellaneous Configuration ========$ A4 P# A7 Y  {
*/
; c3 R  P& z# z, X
. S; l, ]+ R# Q7 @, P/* set default diags mask */& \$ P2 Y* `# {- x& A
var Diags = xdc.useModule('xdc.runtime.Diags');* l) @* u" u0 Q- I3 u5 W
var Defaults = xdc.useModule('xdc.runtime.Defaults');, v5 G9 l" J: }9 B" K

. ]" `9 y1 P& d& u5 TDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;' z7 u/ B' @% z7 {
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
! k4 g  H; R' \+ A% E* ~) _Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;1 C/ E& C. D2 Y% c6 t5 ^% [; A
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */4 L$ z+ `2 D" ?, W7 h' p
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */* ]/ b# b4 M2 x" u
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
5 Q1 h  P9 d) P+ |Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
' y2 A+ W5 t6 O4 h" [; o$ q* R+ IDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;& _7 O# W: }% Q. L, K; z: t
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
9 y) ?0 t1 Z# P6 d. @Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
. t/ ^+ O4 Z% v- f& ~" e1 P- s) U/ z+ KDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;, _8 ~$ `2 _3 X6 ~8 m% X
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;) r3 g/ b: X: I) ]( `
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;3 J  Y9 [+ I" e$ x
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;. m! Z$ z5 e" }! R7 }+ {- F  _/ i4 O
; w! h/ C9 \# c/ F
/* override diags mask for selected modules */& `3 n9 j* ?" y
xdc.useModule('xdc.runtime.Main');. x8 J' D6 t- G* H. f' ]) E
Diags.setMaskMeta(, E/ {( e0 Z" p! D' n& R
    "xdc.runtime.Main",6 k' \+ N$ ~- W' S5 b
    Diags.ENTRY | Diags.EXIT | Diags.INFO,' E4 T7 U2 x  [( {! Z+ L5 \  u
    Diags.RUNTIME_ON7 C6 E8 C/ f" D+ k9 G
);
5 Q. R" L- e% c4 O; z, A' _* H' H  M
var Registry = xdc.useModule('xdc.runtime.Registry');' l2 M- N2 t' C7 {1 o; ~/ M# r
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;: Y, ^* j8 b6 Q/ g+ y# v! g! ?
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
; X/ e9 d. ~2 @  Z2 S( pRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;0 v" _! u0 \& x2 K% @# i
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
2 x3 Y! j# o; u4 p2 [4 i- A) _: g. x/ z1 |6 ~  B' k1 r5 D& N! J
/* create a logger instance */, Z; s# c: O) h6 Z# R
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');. t% g4 M! K7 H4 P- G" C; v
var loggerBufP = new LoggerBuf.Params();
( y1 X+ @0 x) _8 t+ _0 n/ HloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */' _7 X2 U' t# W) Q) q& F' r+ @% x/ M
loggerBufP.bufType = LoggerBuf.BufType_FIXED;" o5 e: I% ?' u
' z+ g' w# D) J5 `& I
var appLogger = LoggerBuf.create(loggerBufP);' K; _: }( K* m
appLogger.instance.name = "AppLog_Core1";% i/ e4 Z$ b1 S% z! c
Defaults.common$.logger = appLogger;
# l: y% B% G5 a3 a8 ^9 S- fMemory.defaultHeapSize = 0x8192;    2 L7 W3 L: T9 r+ w' F
Idle.idleFxns[0] = "&LEDStatus";& {2 ?* [& ^% Q% H# i3 ]0 R+ H! p3 P8 B
Cache.initSize.l2Size = Cache.L2Size_32K;( J9 B. v' e7 g% g8 d9 O5 t
% j5 s% ~% ~0 c: z( k0 `
回复 支持 反对

使用道具 举报

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 */, k( K( W; \1 i" K. U2 M& _: Y
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');% I, U( y6 k6 w- s- u0 a
var heapMemParams = new HeapMem.Params();5 S' i9 n. Z; I; }
heapMemParams.size = 0x4000;
( j0 E  V) D. d0 L
+ z1 c/ ?% ~1 W# Kvar Memory = xdc.useModule('xdc.runtime.Memory');
/ S1 Y5 \5 q7 c: e# oMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
  r; R- ]2 H9 E5 e0 e4 \, B& _, ]8 G) X1 L
我大约calloc  每次共计大小为5K*16bits,- q( X, u; x; {% v( m
而默认配置才0x4000、需要改大。3 F# L+ \# d+ j* p0 t4 d- B

* ~' h! [1 A" h1 r/ d
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
) z9 u; S* Z& n5 F) [& NProgram.heap = 0;7 `$ J% i; I- o5 u0 ^  l. n
Program.argSize = 100;  /* minimum size */* g9 o6 W: t6 K) e
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-4-6 22:40 , Processed in 0.041590 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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