关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
; W4 ]' K- W/ v- b! ^2 B& ^, k7 l0 {; b/ C0 r" }6 s: `: J3 E) \9 l
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
1 S/ v' X6 n* t" w& x
7 V/ z! v8 l3 {其他程序段。。。。。# X/ ~' m# K; F  W2 W3 I  \
+ z3 {0 f7 V1 _) Z
   free(x_d);# y! a5 s, q* R! N
9 H* h* T9 M! x/ x: M% C# M
使用DSP侧单独调试功能,验证动态申请没有问题,
5 G  C  ^: R, H' r7 D! }" _1 q: S
+ Z$ y; A$ o& L$ X: V但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
/ |4 u6 ?2 [, h) g

1 l! r1 L. Z* b. v' G) A# R3 E5 f, _* T' E1 g0 E: z6 N
$ M" x9 V5 V+ f) Q9 @& Q: C/ R

  [( q2 R9 ]. d% ^
2 s9 B- ]* o& a  E% m" K8 Z1 W1 F! a
& A7 [! j! ^, k; T" t
4 T- B5 Q7 W3 }, I. z% U
0 |3 o6 ]! {3 v6 L  D% C' U
+ g/ I) w1 B& i3 F
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
: [3 R+ U7 u4 K( o' H; }9 p我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
; d+ ?7 e3 S' S' V" V(不过疑惑的是,为何单独DSP仿真就没有问题呢?)0 ?; {2 }. C% A4 l: J

8 L" N2 o- D+ x) U3 U1 x是不是需要在DSP.CFG中进行配置# y* ]% ]. S! C$ k4 t/ p5 V
我现在的配置为0 s! h( Q6 i  U  I# o5 v
3 u, N( ?& B  a: J6 x
/*
/ k8 V; V* c$ Z  D1 e0 V" O; t4 c *  ======== Operating System Configuration ========) q# N" D% z; f2 W) F
*/
4 s  K. a$ S% [; P; c6 @, G3 w( ?# @' p8 m" E( p
/* no rts heap */& @7 m4 g- g6 }7 @7 d% v( H
Program.heap = 0;) t' C; a  E' q& z7 _
Program.argSize = 100;  /* minimum size */
) l/ V3 Y) P9 @& R' n. EProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
9 U/ o3 f6 ?: \7 H6 D" C; U) _7 e- n9 Y" X# x2 |
/* create a default heap */
/ U: w# G; V5 k, Hvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
$ e2 M9 n0 ~8 C2 |5 W, ~: W; {var heapMemParams = new HeapMem.Params();  t, O- c+ D' J4 `" D) N
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大5 x% Z# Y$ m0 U' _. [, Z

4 @2 f9 w+ j' i& i" A: w
var Memory = xdc.useModule('xdc.runtime.Memory');
) C+ f" J$ W  f# D1 R8 I7 y! uMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
2 Y( P5 n$ w- D: M$ V, ~& H/ L: n. b# B4 D* p# f3 a
/* configure System module */
1 W* q$ R7 s8 |var SysMin = xdc.useModule('xdc.runtime.SysMin');5 j  V) c0 x, e5 j! r9 w7 @4 R' N
SysMin.bufSize = 0x1000;
6 w! k( K6 w- [7 i3 Z& N/ |* b9 `SysMin.flushAtExit = false;
- I+ y- s& {' y& v3 z, ?& M# {+ I. z: d6 Y& f8 r  l9 K% S
var System = xdc.useModule('xdc.runtime.System');
0 \' G) a; g; Z9 m4 OSystem.SupportProxy = SysMin;
1 @) Z" R9 E6 n5 u" n
( K$ x: q' U; H" r" I( d/* configure SysBios to use the lower half of Timer 1 */* I8 P0 s) T! H  K
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');* ^4 z% s9 L* ~2 d" d2 W9 ~
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
7 k2 o& T3 E' k$ mTimer.timerSettings[1].master = true;
7 d, ~  v, ~$ c% a8 w5 bTimer.defaultHalf = Timer.Half_LOWER;( P- O- ^: G* c) G
Clock.timerId = 1;
1 l  w: x0 T4 \  G; W
! x6 d; }! Z- X" a+ R0 L: ]1 |9 Q- B* w; e/ C
/*
* N6 D9 D9 `$ S/ I$ M6 r3 W, }5 k *  ======== Miscellaneous Configuration ========# x& k8 A# s8 i  m
*/4 \6 u; ~/ x2 I* v/ h# Q$ L% T

9 c. E6 k2 L% K( U) n3 u/* set default diags mask */) y1 @3 T& M4 G6 e/ [
var Diags = xdc.useModule('xdc.runtime.Diags');2 s: Z) W0 X! Q/ P3 T1 k
var Defaults = xdc.useModule('xdc.runtime.Defaults');2 T  I- K7 a! d( F) h$ F

& r2 x, [% ]% K# G3 C' EDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;9 C" ?) _$ y& l. `& Z
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;, C  u: y! S0 Q- g
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
# e& r4 o$ l7 _) }Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
. W5 K  H) E4 uDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */" q( i+ M* C2 ?- ^7 H* Q3 d
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;9 f# W/ T  \4 ^2 p; ~3 o
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
+ Z8 @1 F) {# r/ l0 I! YDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
8 K" |0 e* D' @7 T- x8 V0 HDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;6 {' f7 @6 E7 \/ E3 A% Z
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
, @  E2 i" @7 W" B& n& ZDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
: }: ~8 M" |' k' P" S, ?0 qDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
2 Z* e& r% \3 U" EDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
$ X7 t; \7 i% b) I. m; I. HDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;- |2 \! o, O9 k7 \
* c1 T2 u; l8 L$ k5 G, q
/* override diags mask for selected modules */- L& A+ h# A! J& e. m
xdc.useModule('xdc.runtime.Main');( s& a  S8 q5 n! h+ A
Diags.setMaskMeta(
/ }2 A- E# V# z8 {    "xdc.runtime.Main",& h! a. }. ^. C& D( O+ a; E
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
$ Z7 Q5 _5 ]0 P; z0 A    Diags.RUNTIME_ON
, M% g5 U+ z7 q9 N5 _! _/ d);
: w5 ~- _4 s4 P  _$ r
& H: w4 I4 D- H3 u, Z$ ]var Registry = xdc.useModule('xdc.runtime.Registry');
8 U6 ?5 {, i# V8 u. c7 h9 MRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
$ g7 K9 s- r2 d4 z2 ?: GRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;+ m7 `9 k0 j) R1 s% v
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
3 h0 x  b2 w; u2 }& O" ^. j/ jRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;  w1 V- _3 S5 Q$ F9 {$ d% t
, b9 {! s4 p# e5 p1 h
/* create a logger instance */
+ z% i' S* d$ v. P  k7 Rvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');' I) S" k) O: O4 J
var loggerBufP = new LoggerBuf.Params();
8 L) y+ G. _/ A0 g( ZloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
' C/ {* s. z6 i9 s- ?" @loggerBufP.bufType = LoggerBuf.BufType_FIXED;
$ `7 U  f7 I4 C4 Z+ B' R
9 D. o( b' ?3 x( S: }1 qvar appLogger = LoggerBuf.create(loggerBufP);9 h+ e% J: f( L7 f2 y! x
appLogger.instance.name = "AppLog_Core1";
# Y# |3 Q  ~( x& S2 d" Q0 CDefaults.common$.logger = appLogger;7 D: v, a* w; T+ A. v
Memory.defaultHeapSize = 0x8192;    0 s; R$ Z# Y) H- ?0 @
Idle.idleFxns[0] = "&LEDStatus";
  @8 r  n' O, D; n* jCache.initSize.l2Size = Cache.L2Size_32K;2 T! A0 A( Q% K
% A% v; v" ~" C0 i" S( {
回复 支持 反对

使用道具 举报

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 */
, z3 A' w; n& k, |" c& Tvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');- b  E) L$ ~1 A# `
var heapMemParams = new HeapMem.Params();
$ U2 @) h! `2 e6 `% D1 OheapMemParams.size = 0x4000;5 o' ~$ \6 Y0 G- f
. H% Z) A# e8 N/ b
var Memory = xdc.useModule('xdc.runtime.Memory');, B) G# @7 }; B4 ~* Z! ]( S. Z
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
; e" Q8 x$ J: g. V# K
4 |" ?3 p* i3 [2 O4 ^; s我大约calloc  每次共计大小为5K*16bits,
* _6 r1 _$ E# L7 d. ~6 F& S而默认配置才0x4000、需要改大。
$ a4 b1 b6 C  C7 x' X
4 j! t) x7 H5 O6 F: B$ d  a' c
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
& E1 }0 E% Y3 G6 V; |4 NProgram.heap = 0;8 M, O: T  M, E$ p+ J9 z4 `) z2 y- T$ o
Program.argSize = 100;  /* minimum size */
- D# V6 J0 x9 d9 o, F% pProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-5 09:02 , Processed in 0.049031 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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