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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
" h9 v0 W: B6 K* l' F
* X& I# U- \# H/ p+ B. g+ K  b    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
6 y) g8 B' r- S1 {" K. @
+ @3 @# T1 X% @4 g3 Y; Y( Z3 a其他程序段。。。。。4 K$ X) K% f. ?- R# w& V2 z+ j

; W9 y1 J9 G- \% v   free(x_d);
; F# x) h5 Z' G1 K3 d2 U, G2 D9 |! A8 }% Y2 f9 B) J
使用DSP侧单独调试功能,验证动态申请没有问题,
1 g, P& N; E$ N9 o' ^) O
. ~. [/ b) c, J! D但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
( C. K6 [% W5 n2 a* V2 b# i$ F7 u
, t# Z1 \, Y) R5 c+ m* C
) B  w$ \: e: n* W- U$ t

, M' V/ U) h1 ^& L% Z; q, [- ^) U0 K$ G) s+ T! t9 j8 [

& A* A) o( K7 P& Y' ?5 w( `, \" o* \
0 O# I) |- _- ~8 @3 p1 T- b" q/ Q- o  {- N9 ]' D

" j/ O, Y: X7 Z% W4 a7 c; }1 V* F1 N9 B. ]" m! D

# d) d# F7 W& `7 {
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
$ @4 X/ h; w* ~. o我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
. r- T) ~/ ?8 u4 q! v(不过疑惑的是,为何单独DSP仿真就没有问题呢?)" F( U& @, K9 J) W: `) I# B
1 y: T: p, D3 c8 G% P
是不是需要在DSP.CFG中进行配置
! f7 h% W* V# F, w3 {* {我现在的配置为  \) A; n0 h3 x( N

0 ]/ t0 q" w& j) Z' G/*0 \+ N2 u- W/ ?  s: s& U- b4 j
*  ======== Operating System Configuration ========2 w6 o' B3 J: T! M; C& g* Q1 @
*/+ G- S  W& b4 l( X& W( `8 A) F
5 V6 ~, y, p) k4 O+ u. `8 i7 R& a
/* no rts heap */
. K2 U% X& G  b+ J7 i8 tProgram.heap = 0;
: i+ O2 M# n( a$ D1 s6 B4 OProgram.argSize = 100;  /* minimum size */
5 S% E6 w% P2 y$ X9 AProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大$ C. l7 N$ j7 W& Q$ M
# w$ R+ n$ A, ~/ O  r
/* create a default heap */2 `- B( B% A* J, T. C2 O
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');0 ?/ k( D2 N* h* ~0 I
var heapMemParams = new HeapMem.Params();
( `+ f$ r, t. L# P9 oheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
, X$ b# Z- g5 w
$ h9 M6 j2 e* I
var Memory = xdc.useModule('xdc.runtime.Memory');
4 R; u) \& L* x, a4 {0 Z3 wMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
. z" t0 ]5 N9 a1 ?& r
  K5 g. c3 x( R3 L, c- E/* configure System module */
  T) r4 a3 e0 @+ k' T3 |  O9 b5 tvar SysMin = xdc.useModule('xdc.runtime.SysMin');2 ^( |5 P( `" Z7 U- ?7 [
SysMin.bufSize = 0x1000;6 g% E" A) U. C4 A4 |
SysMin.flushAtExit = false;3 u9 b9 H$ d) n9 o
. z! Y: s( Q" V8 v+ m3 O
var System = xdc.useModule('xdc.runtime.System');
1 a# C2 m) r+ @0 y5 m/ L9 [System.SupportProxy = SysMin;
' v# k( X3 ]) W/ x" ^( v! n' M/ g; d# }5 v' z: z
/* configure SysBios to use the lower half of Timer 1 */: L% h3 L6 Y& N& j
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');# ^& x: j0 u( c& J
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
  v+ L# U: c5 ]' uTimer.timerSettings[1].master = true;/ E& y! Y7 `" w7 T3 ]  R
Timer.defaultHalf = Timer.Half_LOWER;% g' C+ i  n5 f8 q2 ]  U, r+ k4 N
Clock.timerId = 1;2 U* n: ~( Z* f6 O! t% \) O9 O

* A( z$ c: A* k/ W: v  h# [3 M/ P( c' M6 n
/*+ V; C3 x8 n7 P1 b6 U- `
*  ======== Miscellaneous Configuration ========2 Q  N2 V" u3 P  }' ]. w
*/  Y/ Y% s0 H* r9 a
$ V% D$ V& Q( I
/* set default diags mask */& r1 z- a; K6 o2 M2 F. r
var Diags = xdc.useModule('xdc.runtime.Diags');
6 Z1 I, y+ |3 H2 u3 X1 fvar Defaults = xdc.useModule('xdc.runtime.Defaults');
  g! S* ]4 ~% Y* y: q7 j6 A. _/ @& D! F8 m' Y. m3 d$ k
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
" _3 b. c* o: i) j) Z7 N+ L: QDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
( J8 j  u# S* t1 L3 \3 M! DDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;! \6 B: P) z: v1 _. {
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */8 c  q( e, `/ s4 e8 i) ^) H7 H
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
! [- e6 c2 X' E% ODefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;$ R1 e! e9 l3 {) B
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;. O3 l7 }* f4 y# T* X" S5 k& j4 v
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
: E! m, a0 {7 J* U4 i" z1 }Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
; Q7 \+ o' q' P3 y- GDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
: z8 ^9 ]/ D. W3 X/ q! ADefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
9 z$ \/ r& @2 w1 pDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
3 s- W( b$ f5 l2 W4 ~Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;% Y5 g# J5 W$ j8 [
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
0 P. X, T/ ]* i
2 Q  B/ V) B' S, C/* override diags mask for selected modules */
8 m. K' V1 t) s( M6 x' B( f; ^; |xdc.useModule('xdc.runtime.Main');4 F% F8 ^" @0 z
Diags.setMaskMeta(
' ~6 y& @/ ~' H4 L5 _* R& r    "xdc.runtime.Main",/ v9 D6 B; r2 [( q2 @4 _8 k* w
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
% a5 }! ?( P$ i0 e/ w' d    Diags.RUNTIME_ON
; k5 S( g: }0 N* m);
2 }' v2 r; @' B
/ |0 M( q* ^5 M0 }/ p. pvar Registry = xdc.useModule('xdc.runtime.Registry');
* [% s/ W- u& r5 `8 cRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
4 k3 J8 `" `: \; K9 P8 p4 v3 tRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;) p2 R3 q: }/ V/ o
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;: o+ J) l& y2 J$ g* _
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;* S% l$ W- w4 Y
7 I* p$ X$ ~) Z) ~$ v
/* create a logger instance */
3 u& B8 F- X8 e' xvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');( e2 h; u" I- R7 G/ c, k
var loggerBufP = new LoggerBuf.Params();
! R  z  t2 u% N! a6 `" \" l) ^loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */8 d3 d0 I) W7 u4 K7 w  a
loggerBufP.bufType = LoggerBuf.BufType_FIXED;/ j' g5 s3 j3 y
, f  j7 w' G# `2 {- {
var appLogger = LoggerBuf.create(loggerBufP);
+ l; ~# [4 r+ P% o+ C, yappLogger.instance.name = "AppLog_Core1";
9 [2 k) t0 I5 |% v2 A5 ]1 M3 o# ZDefaults.common$.logger = appLogger;
1 e4 F0 N; U9 q) Q; y) v" lMemory.defaultHeapSize = 0x8192;    % }8 v5 n4 K  ], [5 g
Idle.idleFxns[0] = "&LEDStatus";. C% E' M, j/ q5 t- Q( h$ S
Cache.initSize.l2Size = Cache.L2Size_32K;
1 L+ F; K" O* {: X: ~( c% b1 N
0 G+ r7 t, T! w" Z' V
回复 支持 反对

使用道具 举报

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 */
+ M) J) ~, j5 v9 {var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');6 u' N& z7 }* Q4 t4 y
var heapMemParams = new HeapMem.Params();! {0 T8 l1 {  k; f, s
heapMemParams.size = 0x4000;" v3 q  }$ L5 j6 ?  a. _

. \" \# h( x1 e* gvar Memory = xdc.useModule('xdc.runtime.Memory');4 l1 ]0 M1 N+ p# G
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
3 K/ V9 m5 L: x- i- m" Q! b' k/ o, ]; h% r. G; u  H
我大约calloc  每次共计大小为5K*16bits,
7 U& Z. E7 j' O6 x3 e2 C而默认配置才0x4000、需要改大。& k" [# y) u# _3 f. R- G

. r. k% p* I! {0 Y% {' f7 b
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
6 P1 \' V4 y( L( K% kProgram.heap = 0;
& Y4 m% J& T  t. Z8 u8 r* n, qProgram.argSize = 100;  /* minimum size */6 @) ~9 ~- f+ ^( t0 Q6 Y- 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-3-2 19:13 , Processed in 0.042946 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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