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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构& l/ V4 l6 U1 _1 G; B% s5 z

5 C/ P; ^' t: q1 `6 E7 h/ ^    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
0 s6 e' _; j" G) s9 x' `4 p( n2 M# M! [/ z' w/ P  W
其他程序段。。。。。2 C, R- s8 f$ c8 n% \! h. @) \
( a8 t2 o! [) j
   free(x_d);. x' a* K0 N  ~6 d5 I
' Z% [3 C" {# S! L% D( j; g5 X- f
使用DSP侧单独调试功能,验证动态申请没有问题,- r6 P$ p  A: ^# n) H+ U
+ p+ }# ]/ H+ E
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
2 N7 ?! {5 X, w) \8 @; A1 N

, s" t/ f0 o6 X% k3 ~5 g5 b/ @0 a4 t& k' H
. J7 z1 q& ]. s$ T% B. D
! s! T, X7 u8 Y+ I
3 Y5 D- b& P( J! |
, ?6 L- s7 ]+ D  {$ o
$ U: Z- S7 R5 |. d: n3 h: f. H
& p! W7 D2 L' C  ?) O/ l( e
# S8 L7 Z( x- M2 O2 p

. g$ r2 L5 j" \7 K& M& k3 l  T
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
4 S/ R) O& T3 f8 |3 ~7 d/ P( _Program.heap = 0;* J( |; z2 C& o# @9 m
Program.argSize = 100;  /* minimum size */4 T5 {" `/ z5 {5 l
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */
  g) |2 ^% W) Q7 f" ovar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
/ s, v/ ^; A4 ^var heapMemParams = new HeapMem.Params();% [" c( [3 u/ d
heapMemParams.size = 0x4000;3 B3 y" G5 i! `8 k" Z

8 f2 L1 J8 ]" o  p7 [3 p+ ]: G) lvar Memory = xdc.useModule('xdc.runtime.Memory');
" B( f6 ^+ F0 [7 u( v6 wMemory.defaultHeapInstance = HeapMem.create(heapMemParams);2 ]2 _) x$ s- J, t, a& Y
7 M3 [1 v6 P) W& @/ K  I
我大约calloc  每次共计大小为5K*16bits,
2 u7 T5 s; x! b- ]而默认配置才0x4000、需要改大。
9 Q$ ]9 [0 R( N8 r2 x  f
9 Y! H* D9 J6 N
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
板凳
 楼主| 发表于 2015-9-7 15:38:00 | 只看该作者
为什么没人回答呢?   大家都不用动态申请内存方式吗?
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明, X7 v0 |6 f8 J: R0 K
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下. g! \( J% s6 M
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)  c/ |/ }" S9 J# c" V2 h; g

! R9 H, |3 n" {0 W是不是需要在DSP.CFG中进行配置& V( e9 c' |; A/ i* C0 {7 v
我现在的配置为8 O% a" E- q7 Z6 [; ]

- e/ H" f! R6 }: M/*
3 w" b* N8 b8 B. g9 t; l/ K# X *  ======== Operating System Configuration ========
5 b0 _6 o7 Y' R1 _/ y */! R* U' q# q. Q8 {' K! Z9 }1 m1 J
' Z8 M$ Y8 g* Y& |0 v4 B
/* no rts heap */
, N7 X- V; Q" p0 _0 }9 MProgram.heap = 0;/ {8 c( X0 o5 r. q
Program.argSize = 100;  /* minimum size */
5 q3 ~+ L% _  w6 f9 ]& gProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大$ b2 E+ E3 o0 c: S8 p6 }! y
2 V$ t3 h- ~) t2 v
/* create a default heap */
2 n7 x" G. O- D1 f# n# _3 K* P* Ovar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
& S& r2 d& z) Q5 @: L; yvar heapMemParams = new HeapMem.Params();+ C% A8 A" J' i5 G
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
+ r+ @9 [. p0 q% ]7 U- h1 c
' C+ q* V& D* Y2 g
var Memory = xdc.useModule('xdc.runtime.Memory');
, y0 V. v/ `& F9 Q2 h, j0 lMemory.defaultHeapInstance = HeapMem.create(heapMemParams);+ o' K6 F5 C. {

* v  b+ J8 T1 }$ v0 g" v3 {/* configure System module */) Q& i/ I9 Z' B* W2 h$ ~* x: k- S
var SysMin = xdc.useModule('xdc.runtime.SysMin');
0 a7 L' Z- J2 q6 t9 `SysMin.bufSize = 0x1000;
1 y; N/ h9 L* i5 T9 E/ P( ~SysMin.flushAtExit = false;
$ N$ \& _7 o# T. f. s6 ^* e; `* ^0 V$ p& D. p# U
var System = xdc.useModule('xdc.runtime.System');
) |: |. d  h& Q+ m- b  \$ R1 n) HSystem.SupportProxy = SysMin;
8 P6 U6 N- P+ J3 A+ y
8 w/ v1 G2 N- z" S9 W/* configure SysBios to use the lower half of Timer 1 */1 i$ w& N  m. l( Z" R1 v; A- ~. M
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
+ Y* v- [* K: l( m& T  [. }var Clock = xdc.useModule('ti.sysbios.knl.Clock');! y: f/ c7 j; s$ [) ?, d+ n
Timer.timerSettings[1].master = true;
+ S' d" I- N4 x( y3 xTimer.defaultHalf = Timer.Half_LOWER;
& `/ J/ U: B+ E6 y, ]9 bClock.timerId = 1;
2 a" p" [* S8 F$ g* p: Z9 U, u9 u+ n9 }- l& W9 t4 q
! w, W1 P8 q1 f3 p
/*- O, O% j+ Q! n4 v8 D( ^2 m
*  ======== Miscellaneous Configuration ========6 h. P% j: e$ M/ p! g
*/; d$ t3 n2 Z1 m* a
5 Y4 {2 n5 |, d% q! g
/* set default diags mask */
$ F8 c$ Q- t/ ?/ U* n1 O& kvar Diags = xdc.useModule('xdc.runtime.Diags');0 O% a7 b! D+ y1 \
var Defaults = xdc.useModule('xdc.runtime.Defaults');
/ H& |  s0 Z" g- c& A9 R+ y
6 L" Z0 L' y' [2 h! pDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;) {, d& V( S5 X$ s  X
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;+ @2 @1 C# x2 }8 Q$ h1 B, u  [4 N
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;8 ^4 U" w, M: c! [; _
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
$ J- u" e$ s- I: b- f+ B1 Q/ PDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */- }" N( W& _4 c
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
+ W- }+ Z" P9 L" B* [- l/ j, VDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
6 Q% B5 K, I8 k: MDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
9 \5 J' z2 C. ]% B8 SDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;4 K; K5 c" O% o. I
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;3 ], p8 y3 j, ^
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;; N5 Z6 Z% K1 F' F
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;: h! m' _  h% q* k( `
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
/ ~. k6 ~" p, t/ DDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;, C! I! f4 N; t; |# j
' `  r; H) z1 \6 `
/* override diags mask for selected modules */9 N* O" R& [7 b. F
xdc.useModule('xdc.runtime.Main');
- H/ w9 a4 n7 Y( O5 c7 Y) p0 P" zDiags.setMaskMeta(4 W5 Q% ^1 m1 h3 I( F! W* f0 _
    "xdc.runtime.Main",9 L, ~( t/ p) G
    Diags.ENTRY | Diags.EXIT | Diags.INFO,2 @6 E8 j) x9 I3 w( ^) Z( v  [0 G" Y! ^
    Diags.RUNTIME_ON
% m3 U- J. o" ~1 @  p);7 H& _9 D, b# X# X3 B: B9 S
+ m, F. _4 {6 I! B$ `& @+ ~
var Registry = xdc.useModule('xdc.runtime.Registry');
7 E& R4 H, {9 x' e  kRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;4 y7 F! @& M5 U
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;: a, l9 R2 V. K  y( ~
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;* A! b1 K0 e+ F/ U
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
/ I# I- A  T# S; M: K0 h1 \
3 P0 T. V8 f" S& S4 m0 t/* create a logger instance */
5 }" t' s5 H% X) N5 @var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');' d5 ~/ O; I' r. V' M
var loggerBufP = new LoggerBuf.Params();
9 |% F& t  ^0 xloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */7 n' }) Y$ Z5 J7 q# c
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
* Y, A) D7 b% u5 R+ g7 ^6 A' S; `
5 P+ h; `9 U/ cvar appLogger = LoggerBuf.create(loggerBufP);
8 \+ L  p) l6 w" Q+ |! b4 nappLogger.instance.name = "AppLog_Core1";2 a7 a, v) J3 v1 d9 ]. x) q
Defaults.common$.logger = appLogger;0 J7 U( j( N( F& T
Memory.defaultHeapSize = 0x8192;    * w) A$ X' q( H
Idle.idleFxns[0] = "&LEDStatus";7 J$ F; z+ j! U& y0 q9 ~4 R) X* h
Cache.initSize.l2Size = Cache.L2Size_32K;
2 W" n+ q3 x1 q6 V- h' o' p8 K! O8 q3 H; V3 B7 S: h+ m! g: n
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-12 17:06 , Processed in 0.041780 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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