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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构# a: I+ |# }+ t5 U- U' x  z. K# @
. Q6 F0 ~8 r8 d7 F! R( d5 w/ r4 M; |
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256/ T8 I$ M8 s4 ?2 p# U

; U/ [- _" }2 i& u3 e! m& I其他程序段。。。。。
; C) o+ G: d6 \& g' ^: V# U- a: S) Y
0 j1 d! h0 a4 @   free(x_d);- Q" K1 F3 o6 |. N! u

6 F  y2 A$ g9 ?, N使用DSP侧单独调试功能,验证动态申请没有问题,
( q0 ], {" f. e0 d6 V$ u( M7 J
% E( x) O5 }) n3 W但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
; T* d" d" M7 Z) S

$ Z7 c; B+ `6 R& l! @# C, s8 @1 p- ~( j7 c
5 k% Z; a2 q8 L5 j, m- a4 K/ t

5 r+ q$ z8 c& B$ D
9 e1 w2 i7 g& _/ ^4 r: W) ?) X9 F8 J$ L6 W9 V8 n: \# g
& r8 H) H9 R, K% u4 w8 a$ V

+ h$ `& F( ?* I! k, r7 Q5 }7 j) K/ [% w9 K
1 u% a( \2 w* v  J1 `7 i
分享到:  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 */
$ d, h- L3 W$ z  {1 P8 \Program.heap = 0;
3 f0 e3 ]+ a  q+ s; s2 tProgram.argSize = 100;  /* minimum size */
. c* ^5 }# e: \) f& ZProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */! K# g' N" L4 P2 ~4 @
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');3 o7 i* N2 X* z: F
var heapMemParams = new HeapMem.Params();
9 t, B) G4 V) G( u) e) ?, ~! ^" @. OheapMemParams.size = 0x4000;
  m- A# b8 U4 |# b. A
2 ~7 L! t3 T3 dvar Memory = xdc.useModule('xdc.runtime.Memory');, t5 W# s; {/ l1 {
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);5 C; Y% O* Q, [& _# A  W

. t2 m9 j+ S: U# P- x( @) {我大约calloc  每次共计大小为5K*16bits,8 Q9 o6 J0 [* J- ?4 P
而默认配置才0x4000、需要改大。
$ a2 `5 p, a7 M/ i8 R! S- J% s# W9 b$ L
回复 支持 反对

使用道具 举报

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 | 只看该作者
补充说明  f+ @, O1 X5 o2 j# J5 B) o" X
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下- _) F: u! J( B- N, R
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)' v. M. H9 K, n

  {+ g, I0 v4 M- L+ j- _是不是需要在DSP.CFG中进行配置6 r+ Y7 j; f3 p! |5 z( @3 n' r
我现在的配置为
7 t# {* _( ~) }) e' S' M4 ~8 A
/*( W/ j0 q! D7 J5 v
*  ======== Operating System Configuration ========
- V  T: J$ q; o4 {# r( @8 B */  N0 |# v3 L* c' x7 n5 {

/ _3 }, n% T$ T! K2 V2 k+ ~/* no rts heap */( p! N7 x$ L; D- `
Program.heap = 0;( k: q, S& Q$ T! L8 H& n
Program.argSize = 100;  /* minimum size */( h  {$ p+ B  L: b
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大$ W1 X  m$ ^2 e  I- s) y

! q( ^1 ^" P  A+ Z8 z- d" N/* create a default heap */4 D' T7 a' p- I7 W+ E' A
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
+ Y/ Y8 ]$ ]+ j+ M5 I. evar heapMemParams = new HeapMem.Params();) d3 Q# a) `( t# D0 ?2 O+ b3 G4 @
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大" t! ?$ y6 {, |' o( \& B% b

; x! {8 f# c: i" l
var Memory = xdc.useModule('xdc.runtime.Memory');
8 b$ _$ b/ [/ C$ J( gMemory.defaultHeapInstance = HeapMem.create(heapMemParams);5 u$ b2 f  u8 b* [  U  j6 Z- L
0 }; S) r1 X) n# k
/* configure System module */
+ z% n# e+ I' e; d% Pvar SysMin = xdc.useModule('xdc.runtime.SysMin');
) o8 ?9 ?0 x! v8 b7 \# B. fSysMin.bufSize = 0x1000;4 G0 a' E. B( T- N: z; \
SysMin.flushAtExit = false;
3 C) H# Y( [8 O2 ?$ @& a& @7 l: d6 r0 N: m8 S# n1 z* w
var System = xdc.useModule('xdc.runtime.System');
! s! r' V( Q" R. {1 zSystem.SupportProxy = SysMin;
+ A  y% Z+ O6 F
+ {# S1 @) _) j8 G) H) F( T: N/* configure SysBios to use the lower half of Timer 1 */
) d& Y2 b3 i- y! f- pvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
& _+ u. L/ s$ a0 V- r  U9 P9 Tvar Clock = xdc.useModule('ti.sysbios.knl.Clock');5 R1 W& M) X: g( B+ p" A
Timer.timerSettings[1].master = true;$ R6 I" P5 E/ v( J; S4 _7 Z
Timer.defaultHalf = Timer.Half_LOWER;
; B! L- i: t: y( o- e& Y% _5 @Clock.timerId = 1;
; j2 Y. U0 b/ N& U1 F
" F, }3 h9 \5 G- d+ K# [+ R0 {
* z7 Z  C3 j. T$ z1 \/*/ o( a7 d: Z: E" f
*  ======== Miscellaneous Configuration ========
) ^% u: ^/ C9 g9 |% w */
6 ]5 f  A8 c+ O, O
4 K2 E0 q7 b9 Q# G  o/* set default diags mask */
  `, b. A  a7 z( n' F) Hvar Diags = xdc.useModule('xdc.runtime.Diags');% I& j% w! j+ c, r* e( o
var Defaults = xdc.useModule('xdc.runtime.Defaults');
8 C! X/ C' r% B0 _6 M( ]- n& Y. U$ L; z; U8 b# {7 |
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;4 G! g3 k9 z$ k) W
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;5 j1 M( N0 ^: z! r
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
- J$ i. h# h+ m& ~1 }7 VDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */$ s4 e4 l& [; f
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */7 D. G/ i" V8 T$ Z( d
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
7 |2 ?8 a/ |, _Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
0 [1 K( k! b0 W9 b; o; A" YDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;9 K2 }) a4 j& t2 U/ H
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;; F  p" R6 T8 G6 _: ]! X7 o( o9 O
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
# b$ ~. c: y, m4 R  WDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
$ |8 }2 r6 s1 v7 j. d0 [. LDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;/ W4 m* i; e2 @8 Q) v; U3 O0 I
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;/ Y! E: L+ R% P6 ^  [* J/ n. j. X
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;; s, s8 m* O  x* ^
, Q- N! O. x0 h
/* override diags mask for selected modules */
' j/ d; P) q- \xdc.useModule('xdc.runtime.Main');7 l4 M+ }8 ?6 K: c& X: q% M8 ]8 ]7 L
Diags.setMaskMeta(
& X, }$ Y3 s% E% Z$ u8 w    "xdc.runtime.Main",
; X, @* P$ r0 B$ t7 y7 r$ Y* P9 S: d    Diags.ENTRY | Diags.EXIT | Diags.INFO,
: t" A& E' p6 @7 `# @6 ]" T    Diags.RUNTIME_ON
0 a2 P7 T$ J0 Y);
, k+ S& `- p; z/ ^6 z$ f! f1 W) s2 F( O7 o5 h
var Registry = xdc.useModule('xdc.runtime.Registry');
" V* ]1 O6 a, J, sRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;) ?& d; T. |9 H' D, L6 W! [( m
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;2 `) ?0 @1 f& }$ |! t' Y4 N( a! l2 a
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
4 T& h3 @8 l% [9 u0 P& e* f+ MRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
0 _* J  D1 M9 P4 V, e' t) |: V
5 H7 `# R* N& i/* create a logger instance */# E) ^1 r. d1 v0 B6 \9 Z! c( Z' i
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');1 @# _2 v3 _$ M
var loggerBufP = new LoggerBuf.Params();
% v) I/ D0 Q  [2 j1 Z7 dloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
# y* @0 @1 R9 z# p# jloggerBufP.bufType = LoggerBuf.BufType_FIXED;
  Q0 b' G* ?# L; s' h0 O9 ^5 H+ [8 O! D
var appLogger = LoggerBuf.create(loggerBufP);
' P$ ^% y; I( ]) MappLogger.instance.name = "AppLog_Core1";
0 I" U& f7 N: G4 x" eDefaults.common$.logger = appLogger;9 b5 w- m5 c& o, F" b
Memory.defaultHeapSize = 0x8192;    4 y; f2 \9 t0 q& R' o- n  m) C
Idle.idleFxns[0] = "&LEDStatus";
% I8 }9 Q* N9 ?, y. x. xCache.initSize.l2Size = Cache.L2Size_32K;3 X& S8 Y5 u) P5 {8 x& ?' U, ~
( H4 ?/ I' J3 B
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-28 02:15 , Processed in 0.044962 second(s), 27 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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