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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构8 O6 _( {* K3 B% T- Q
: V9 {% y- p7 V% ^
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256; t* E2 p0 h* [4 d9 U

7 ?' Z* D, j. M* b  {  @; o. \其他程序段。。。。。
( V* \4 w. r* G( W  w 1 k  n" |1 P+ }" ~
   free(x_d);1 S+ o; a; v0 Q0 O) }8 N! }

7 D& M3 S3 k. b2 v( h使用DSP侧单独调试功能,验证动态申请没有问题,3 f2 M! j. [' W4 D; h3 U
) }7 G: i# h4 A3 ~
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。. V* Z9 i. Z8 F) B4 L/ G
, k7 J% X5 o8 |8 O2 e
5 q0 H$ y4 S) C/ r$ y( k

! O: L% k# V/ ^( @" z1 e
; u" t* B, [! h+ M( b
+ `# w' h# f% ]7 j% F7 N7 P1 k$ M& w7 m4 S
4 V; u5 y/ ^; L. c' D

% C4 s  @) P7 R: H+ s1 O) I
8 n9 A$ J- ?3 o2 X6 a; p/ u/ Y9 a! v. s
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明$ @% |8 e* v- H5 W+ Q( s/ @& V
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下8 f6 A3 J: }* w3 F0 t+ Q- \
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)" C2 c; {* ]. k( ~+ d
9 b; B& t8 u+ q5 w1 z) v6 W
是不是需要在DSP.CFG中进行配置
: F8 e" L0 e3 _' `7 D) g7 P我现在的配置为
* E+ m9 ^( b! `6 [
1 ?- I  [+ w* @/*# ^; _, ~  D0 D# r) s
*  ======== Operating System Configuration ========6 x5 ?. X5 O" o
*/9 @8 d! O# L5 N( S

6 `" z2 P$ ~6 F1 S/* no rts heap */9 J( ]% J" U8 {: Y( L# ]
Program.heap = 0;7 L  _$ {/ X1 Z  L# _8 |
Program.argSize = 100;  /* minimum size */
% }6 I" @7 q, L, n: y8 |( P& `Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
/ p. c- t$ p5 x& O. u- [
6 l  B5 l2 y1 A8 q# ~3 L  o5 B% G/* create a default heap */% Y, E- x, p$ g" W3 c
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');- h- q$ O  M  H6 V) x
var heapMemParams = new HeapMem.Params();
6 J  s% [* H' b+ e7 pheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大/ @* p# y- S0 x

; s5 q; T. P/ o6 O: K4 i
var Memory = xdc.useModule('xdc.runtime.Memory');
; j" S$ }. o( r# |: \6 t6 iMemory.defaultHeapInstance = HeapMem.create(heapMemParams);& W( k  k. r# z$ x+ E* q5 Q) x: P
8 |( m/ o; s* A) J
/* configure System module */
3 k8 u2 r- F& q% e" _# @' e% kvar SysMin = xdc.useModule('xdc.runtime.SysMin');
% C8 |9 R, i0 l/ Z; xSysMin.bufSize = 0x1000;" v4 K' P, X) E7 \
SysMin.flushAtExit = false;, k, X5 ]: ^, R& R  x

# _; S& s) v2 Dvar System = xdc.useModule('xdc.runtime.System');. @9 k' Q/ v' _& U0 |# g4 A
System.SupportProxy = SysMin;& z' l: w( \6 n: E! H3 n* ?0 q0 s

. |" e' L, A* i/* configure SysBios to use the lower half of Timer 1 */
. l) G6 V3 p4 K4 F) e7 vvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');& {* r& a7 B- x' f
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
: T& ]; @8 D, C: z3 N* v& h  w2 hTimer.timerSettings[1].master = true;
  L8 l0 a* S3 L" a! iTimer.defaultHalf = Timer.Half_LOWER;- \: \% @* h4 U
Clock.timerId = 1;# k6 i% T5 K' w- t$ l
% r1 N1 l+ D6 f: Q+ G: q7 }: g

  V) u4 O; X. n5 s2 t/*
5 c5 P1 u0 z# Y8 \1 f5 r *  ======== Miscellaneous Configuration ========4 ]( X5 ?5 O: b6 q2 M/ m
*/
( T7 l+ }" A# b# B* @6 l* v7 y; `8 ]/ L. u
/* set default diags mask */, |+ B3 T% s# J- m; |1 ?2 Q( @" i
var Diags = xdc.useModule('xdc.runtime.Diags');
3 H+ X! U) J7 Kvar Defaults = xdc.useModule('xdc.runtime.Defaults');
' C, P1 t8 z; s
4 u  D" a6 u) v2 l% z! y- w, kDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;% e* ~9 H4 G& H9 C' H" T
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
1 [% Q2 ]5 F. L) HDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
, }. \- t9 ?0 S2 S% \2 N  oDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
7 t4 @6 \+ t, i" ~3 V% _( zDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
# B- \) o* m& n; a  aDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;1 y/ N$ f9 h$ K: R( ?# N- o
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;7 `4 X- i" n% D/ b
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;2 [3 f  n1 {4 T! c+ q
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;/ A6 }  L- a7 f9 b
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
1 @; x- v* V4 ~+ v" X8 _Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
) g+ O* F, w  {! F, i2 mDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
- G+ }1 T" q& L& C1 G! UDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
! k% S6 g/ q2 N: iDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
' b6 T  P% h8 B3 @! g2 }2 J8 J* p. \- Z; a* v! U0 h. ~2 V4 d
/* override diags mask for selected modules */
  t# F+ G* n/ ^% [+ Hxdc.useModule('xdc.runtime.Main');4 R9 l4 t+ Z& L+ \$ m
Diags.setMaskMeta(
& |9 K% U$ p$ M. d    "xdc.runtime.Main",9 W. h( `0 r  m) K- d* Q
    Diags.ENTRY | Diags.EXIT | Diags.INFO,( |7 k; m' `2 m7 M9 I! z4 f! ~
    Diags.RUNTIME_ON! q- F' c4 F' i5 I) y5 x
);
" p6 V) Y, u7 P% K1 H
/ H9 p7 E) t4 q- r5 i3 d& C# ~var Registry = xdc.useModule('xdc.runtime.Registry');
1 i1 x% P& l/ ZRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
9 v7 @- O( }& N7 Y2 `2 RRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;0 X9 `: h4 ^; x+ F: q
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;. c& ~1 G& J; e' Y0 c" V
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
9 e* R9 X9 u' B; \9 V) l7 j0 s! B# V4 |; d5 }
/* create a logger instance */
, u4 E: o& ~2 \% B: Z# W1 p; Rvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
" r+ i0 O" d9 {var loggerBufP = new LoggerBuf.Params();. B& F, d! F! x& o  d5 r
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */! R- w/ [# h8 A" M3 r% S0 N
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
$ f) i# y' |3 x! W* n; Z5 Y
. q# i0 {" L# g  K) Y  g* }' yvar appLogger = LoggerBuf.create(loggerBufP);
1 S: g: D3 t, N9 oappLogger.instance.name = "AppLog_Core1";/ E1 g2 e6 W! C- e9 c% [
Defaults.common$.logger = appLogger;2 ?0 R. D( }( V- }; {
Memory.defaultHeapSize = 0x8192;   
' f. {" z7 l7 q3 g3 BIdle.idleFxns[0] = "&LEDStatus";
% B( W) W' V( u" d  {. pCache.initSize.l2Size = Cache.L2Size_32K;
/ n5 ^- c8 F9 t' ?; c! y# U1 a' p( Q+ ~
回复 支持 反对

使用道具 举报

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 */) G! h( Z. X! Z7 t& U
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');4 [/ J8 S& h8 @8 f" Y/ w8 E
var heapMemParams = new HeapMem.Params();* \  v; e. b8 q' S7 _, M
heapMemParams.size = 0x4000;9 l$ Y  g0 U% h- W
+ x/ C: h( v: I
var Memory = xdc.useModule('xdc.runtime.Memory');/ O( _" ~. d+ ^. P$ M
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
9 V: C8 ]! @# ^6 B
  m. N- v: E  k" n& a4 c我大约calloc  每次共计大小为5K*16bits,+ @3 _8 B: b+ u" B! K" ?2 P
而默认配置才0x4000、需要改大。
1 y/ ^% _8 y  ~" T- \5 q
& N; ^* w% J9 P5 @- X2 P% p1 b' H# z
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */0 y5 i; {9 `9 P& x+ z
Program.heap = 0;
: ?' z* k$ r- h+ }Program.argSize = 100;  /* minimum size */
. \. [' X* K' ~6 k, kProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-7 14:59 , Processed in 0.047707 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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