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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
/ [. u  f  C6 s8 @
+ R, Y, L5 \# O! e6 A# Z    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
+ B% P2 {6 U* ]- i
( s& m3 M5 i0 t其他程序段。。。。。
& d* u- n2 e4 w6 m 0 m5 v7 t+ L. R8 W" a
   free(x_d);
6 E) A% ?9 x' v' n5 I1 x9 U% ?  z' M8 X/ U5 _" V$ Q- F
使用DSP侧单独调试功能,验证动态申请没有问题,
2 e& a: R% s; M, K9 B) J: U" t$ ^& X+ F
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
  s/ y- ]% p% |

$ S  I  e  E; A+ O/ N  V# Q, g) v1 l3 w4 W1 {

% A$ @7 h7 c. v
# |) j; \' t8 P4 J- ~2 C3 n8 W% Z  w4 ?1 P3 ?% ?" V
! _& o  d: d1 r0 M" _

9 i: c8 `- d" ^. Q% ^$ |
4 p1 ~5 ]/ m2 R2 e! `5 G( {2 f8 }
+ Z9 i' U% M% d  V) q, j& Q" u: y; a& T8 R5 T8 q
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明# c& ^: ~3 ?2 ?3 e
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下7 U9 G+ X. h- F1 [
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)4 Q4 o' C# _/ q5 J2 ]/ C
7 |2 A5 j7 f2 n
是不是需要在DSP.CFG中进行配置  |' W7 {8 d; O4 o4 L
我现在的配置为9 ~% f+ J' X0 |7 M& M
  V5 t' X5 d# f1 U# J
/*$ s( k( Q; O3 @" A
*  ======== Operating System Configuration ========
# K/ X7 c$ v$ ?* d$ x, n; c$ _9 v */
3 j- Y# a1 n0 R) h$ O
! j7 x9 y6 l# V* z( t- Q% m/* no rts heap */
7 C1 d6 ?! E/ |' L7 NProgram.heap = 0;
+ l7 Z8 j: ]: e+ sProgram.argSize = 100;  /* minimum size */' b* I; ~$ @$ C: z
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大- \, o( w) @9 n) b/ m; X6 S$ \' J
2 x" _* d, [, c/ {
/* create a default heap */# M. j! z  r1 g$ I. Z0 I! {) s
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');* U2 i6 F8 P' z8 k8 ^, L0 m7 V
var heapMemParams = new HeapMem.Params();
" _# ^$ \4 F2 d9 c0 t1 p1 xheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大% M& y" b* Z  H, n
# C* b3 C4 y2 s$ ]3 o: j
var Memory = xdc.useModule('xdc.runtime.Memory');
, @% a" D$ `; ?7 K4 \9 v" b7 eMemory.defaultHeapInstance = HeapMem.create(heapMemParams);5 X0 d+ l6 k) ?! ?& ^1 ~1 c. m
$ {( A# w: ^9 L: e
/* configure System module */: s. a4 n+ x  i# T+ f- A
var SysMin = xdc.useModule('xdc.runtime.SysMin');4 [( k5 R  G0 G
SysMin.bufSize = 0x1000;
+ C% E* n  d2 g+ U& K- J& `SysMin.flushAtExit = false;
8 x; E( _1 n6 w% q( b& M
7 m+ W6 X9 m9 Ivar System = xdc.useModule('xdc.runtime.System');- O" X( ~4 M& E4 H* X0 h# E
System.SupportProxy = SysMin;
" @( y9 j+ K: h; ^! M
4 L- I% v. M% h# T1 M/* configure SysBios to use the lower half of Timer 1 */2 ^# y, c  J! g; Z, ~
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
/ `0 i& f2 U4 n" c& ovar Clock = xdc.useModule('ti.sysbios.knl.Clock');, u% D# |; z8 b8 p5 Y& X
Timer.timerSettings[1].master = true;
( N  \! e" w+ W5 F+ zTimer.defaultHalf = Timer.Half_LOWER;+ g+ [8 j+ K( ]0 w+ O2 N1 N; M( K
Clock.timerId = 1;
4 _% j4 O1 g" R
; \* w; z0 r6 D( `3 Q( Z
7 }% S# g* E8 k4 W* v/*
% E1 V( u, R* u5 T* A/ p *  ======== Miscellaneous Configuration ========& j1 a* F$ ^+ ]8 D' @! R
*/. |0 R! C0 P8 k5 t

4 S, O9 u& Z1 L$ ]4 E" e$ a/* set default diags mask */7 c9 L; z) M  N5 U
var Diags = xdc.useModule('xdc.runtime.Diags');
' m% e. `' e* Y- \6 F! jvar Defaults = xdc.useModule('xdc.runtime.Defaults');
! S* K4 y: s  o
: t, X, u# F! i% \$ U( xDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
& J6 t! B, H5 B/ {2 t4 DDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;9 Q7 z5 I3 U- ?  g. R" E1 L
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;0 r! I& C6 d# g+ Z/ @* a
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */0 i& K. q# s, o+ ]7 `
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
/ J+ [8 K( B$ U( \2 |6 \Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;0 R2 ~( R9 v2 K) y* Z
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
' k3 D" D0 ?- `5 ~2 w* DDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;6 P" @8 Z7 `& {% a
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
6 q& V6 j) H0 g7 ]Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;4 u: v9 r" J: j8 A  }6 v5 y% Z
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
' m' F; F# d' N0 ]$ z# n0 IDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
3 x+ r5 B4 i" t7 K0 A" }; m8 `Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
: x) R2 e. l9 b" P2 m. n3 |Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
2 x- N8 C8 x4 i- A7 Q" ?
- j7 Z# k6 ]* `/* override diags mask for selected modules */; Z+ N3 L; z; z* q4 @# H" q1 Q
xdc.useModule('xdc.runtime.Main');
8 U: _+ D& u; ZDiags.setMaskMeta(+ @, n7 V1 W. \' N- s
    "xdc.runtime.Main",& a& ~  f8 ^# O( b" H/ B7 b7 F
    Diags.ENTRY | Diags.EXIT | Diags.INFO,7 f( [& T# [& L
    Diags.RUNTIME_ON* @/ U8 R2 @' H+ F) j& ~$ O
);% e1 e2 S1 s7 m  [+ {
. i3 @' M8 ?) {2 f# Q
var Registry = xdc.useModule('xdc.runtime.Registry');- |+ D; T# q0 @/ w0 i4 k8 Y! O
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;- |. n* c  F  `
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;* ^! F" P. R# K1 }
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
' b3 y6 R) [% u2 e8 YRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;+ E) @- C1 A9 M

! R1 t' U, @% |4 k4 z  e/* create a logger instance */
) ^/ L: f; ~4 k+ S; O9 z2 r% bvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');" T# J; T: m$ r: a" b0 A
var loggerBufP = new LoggerBuf.Params();0 [1 z# }$ O8 d! @; y: s  {
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
1 Z$ A( k4 d4 ZloggerBufP.bufType = LoggerBuf.BufType_FIXED;
! |& _& b; Z7 `& Z  [
, Q$ Z/ e0 z9 F0 ~2 F% b( Bvar appLogger = LoggerBuf.create(loggerBufP);
* A1 K+ ?% j. Q# ]' \appLogger.instance.name = "AppLog_Core1";7 M! J/ I  v* Q4 |+ B5 O$ h
Defaults.common$.logger = appLogger;
, a8 {' h! ~. }' x( v' xMemory.defaultHeapSize = 0x8192;   
* q( S7 F- u# X) H: R5 o8 h0 BIdle.idleFxns[0] = "&LEDStatus";
1 ]* n# `, c, d7 z+ aCache.initSize.l2Size = Cache.L2Size_32K;6 D6 u% H% a" R/ {3 s
% T5 U7 s! A) t- |6 [" Y; {
回复 支持 反对

使用道具 举报

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 */
2 A. D2 g9 H$ Q5 h  ?var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');2 e8 H7 N4 g1 a" e% _
var heapMemParams = new HeapMem.Params();
: r2 k( T0 q8 w0 ~7 i, [* h2 YheapMemParams.size = 0x4000;$ k2 o$ o" k1 }5 y1 u
( R" j+ ?8 E; s+ `
var Memory = xdc.useModule('xdc.runtime.Memory');
- h9 s2 y$ ~' mMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
0 Z* G( D! e9 q* n9 K
9 {5 L. v+ q* X我大约calloc  每次共计大小为5K*16bits,4 W4 Y; v, ]& q% H
而默认配置才0x4000、需要改大。+ {$ w) W. o3 U1 `( A* S

0 ?' M/ W: r$ W' @5 P
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */8 y6 G" t' v- u9 w/ z& h
Program.heap = 0;9 b  }8 o3 {4 t0 r5 b" U
Program.argSize = 100;  /* minimum size */
1 M0 \: i: K, t- R% z+ |) d2 m1 iProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-8 00:30 , Processed in 0.059622 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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